diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2024-08-12 14:35:19 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2024-08-12 15:00:41 -0300 |
| commit | a6c0f193b502783732b083dacc07891237629d58 (patch) | |
| tree | 9fde4eb826b714e7199d4fd45c089c6dd0b7c913 | |
| parent | a121c775f9a08e76ed9cb7f2313668f38ac9c67b (diff) | |
| download | luarocks-lua-to-teal-migration-repo-writer.tar.gz luarocks-lua-to-teal-migration-repo-writer.tar.bz2 luarocks-lua-to-teal-migration-repo-writer.zip | |
refactor: break circular dependency between repos and manif.writerlua-to-teal-migration-repo-writer
| -rw-r--r-- | src/luarocks/build.lua | 35 | ||||
| -rw-r--r-- | src/luarocks/cmd/build.lua | 3 | ||||
| -rw-r--r-- | src/luarocks/cmd/install.lua | 23 | ||||
| -rw-r--r-- | src/luarocks/cmd/make.lua | 3 | ||||
| -rw-r--r-- | src/luarocks/cmd/purge.lua | 7 | ||||
| -rw-r--r-- | src/luarocks/cmd/remove.lua | 3 | ||||
| -rw-r--r-- | src/luarocks/deps.lua | 29 | ||||
| -rw-r--r-- | src/luarocks/deps.tl | 43 | ||||
| -rw-r--r-- | src/luarocks/manif/writer.lua | 29 | ||||
| -rw-r--r-- | src/luarocks/manif/writer.tl | 29 | ||||
| -rw-r--r-- | src/luarocks/remove.lua | 3 | ||||
| -rw-r--r-- | src/luarocks/repo_writer.lua | 52 | ||||
| -rw-r--r-- | src/luarocks/repos.lua | 36 | ||||
| -rw-r--r-- | src/luarocks/repos.tl | 20 |
14 files changed, 159 insertions, 156 deletions
diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua index ddaef760..b027c81a 100644 --- a/src/luarocks/build.lua +++ b/src/luarocks/build.lua | |||
| @@ -11,7 +11,7 @@ local deps = require("luarocks.deps") | |||
| 11 | local cfg = require("luarocks.core.cfg") | 11 | local cfg = require("luarocks.core.cfg") |
| 12 | local vers = require("luarocks.core.vers") | 12 | local vers = require("luarocks.core.vers") |
| 13 | local repos = require("luarocks.repos") | 13 | local repos = require("luarocks.repos") |
| 14 | local writer = require("luarocks.manif.writer") | 14 | local repo_writer = require("luarocks.repo_writer") |
| 15 | local deplocks = require("luarocks.deplocks") | 15 | local deplocks = require("luarocks.deplocks") |
| 16 | 16 | ||
| 17 | do | 17 | do |
| @@ -349,25 +349,6 @@ do | |||
| 349 | end | 349 | end |
| 350 | end | 350 | end |
| 351 | 351 | ||
| 352 | local function write_rock_dir_files(rockspec, opts) | ||
| 353 | local name, version = rockspec.name, rockspec.version | ||
| 354 | |||
| 355 | fs.copy(rockspec.local_abs_filename, path.rockspec_file(name, version), "read") | ||
| 356 | |||
| 357 | local deplock_file = deplocks.get_abs_filename(rockspec.name) | ||
| 358 | if deplock_file then | ||
| 359 | fs.copy(deplock_file, dir.path(path.install_dir(name, version), "luarocks.lock"), "read") | ||
| 360 | end | ||
| 361 | |||
| 362 | local ok, err = writer.make_rock_manifest(name, version) | ||
| 363 | if not ok then return nil, err end | ||
| 364 | |||
| 365 | ok, err = writer.make_namespace_file(name, version, opts.namespace) | ||
| 366 | if not ok then return nil, err end | ||
| 367 | |||
| 368 | return true | ||
| 369 | end | ||
| 370 | |||
| 371 | --- Build and install a rock given a rockspec. | 352 | --- Build and install a rock given a rockspec. |
| 372 | -- @param rockspec rockspec: the rockspec to build | 353 | -- @param rockspec rockspec: the rockspec to build |
| 373 | -- @param opts table: build options table | 354 | -- @param opts table: build options table |
| @@ -419,7 +400,7 @@ function build.build_rockspec(rockspec, opts, cwd) | |||
| 419 | local rollback | 400 | local rollback |
| 420 | if not opts.no_install then | 401 | if not opts.no_install then |
| 421 | if repos.is_installed(name, version) then | 402 | if repos.is_installed(name, version) then |
| 422 | repos.delete_version(name, version, opts.deps_mode) | 403 | repo_writer.delete_version(name, version, opts.deps_mode) |
| 423 | end | 404 | end |
| 424 | 405 | ||
| 425 | dirs, err = prepare_install_dirs(name, version) | 406 | dirs, err = prepare_install_dirs(name, version) |
| @@ -464,15 +445,19 @@ function build.build_rockspec(rockspec, opts, cwd) | |||
| 464 | deplocks.write_file() | 445 | deplocks.write_file() |
| 465 | end | 446 | end |
| 466 | 447 | ||
| 467 | ok, err = write_rock_dir_files(rockspec, opts) | 448 | fs.copy(rockspec.local_abs_filename, path.rockspec_file(name, version), "read") |
| 468 | if not ok then return nil, err end | 449 | |
| 450 | local deplock_file = deplocks.get_abs_filename(name) | ||
| 451 | if deplock_file then | ||
| 452 | fs.copy(deplock_file, dir.path(path.install_dir(name, version), "luarocks.lock"), "read") | ||
| 453 | end | ||
| 469 | 454 | ||
| 470 | ok, err = repos.deploy_files(name, version, repos.should_wrap_bin_scripts(rockspec), opts.deps_mode) | 455 | ok, err = repo_writer.deploy_files(name, version, repos.should_wrap_bin_scripts(rockspec), opts.deps_mode, opts.namespace) |
| 471 | if not ok then return nil, err end | 456 | if not ok then return nil, err end |
| 472 | 457 | ||
| 473 | util.remove_scheduled_function(rollback) | 458 | util.remove_scheduled_function(rollback) |
| 474 | rollback = util.schedule_function(function() | 459 | rollback = util.schedule_function(function() |
| 475 | repos.delete_version(name, version, opts.deps_mode) | 460 | repo_writer.delete_version(name, version, opts.deps_mode) |
| 476 | end) | 461 | end) |
| 477 | 462 | ||
| 478 | ok, err = repos.run_hook(rockspec, "post_install") | 463 | ok, err = repos.run_hook(rockspec, "post_install") |
diff --git a/src/luarocks/cmd/build.lua b/src/luarocks/cmd/build.lua index b46b9532..6d719d5a 100644 --- a/src/luarocks/cmd/build.lua +++ b/src/luarocks/cmd/build.lua | |||
| @@ -13,7 +13,6 @@ local deps = require("luarocks.deps") | |||
| 13 | local remove = require("luarocks.remove") | 13 | local remove = require("luarocks.remove") |
| 14 | local cfg = require("luarocks.core.cfg") | 14 | local cfg = require("luarocks.core.cfg") |
| 15 | local build = require("luarocks.build") | 15 | local build = require("luarocks.build") |
| 16 | local writer = require("luarocks.manif.writer") | ||
| 17 | local search = require("luarocks.search") | 16 | local search = require("luarocks.search") |
| 18 | local make = require("luarocks.cmd.make") | 17 | local make = require("luarocks.cmd.make") |
| 19 | local repos = require("luarocks.repos") | 18 | local repos = require("luarocks.repos") |
| @@ -185,7 +184,7 @@ function cmd_build.command(args) | |||
| 185 | end | 184 | end |
| 186 | 185 | ||
| 187 | if opts.deps_mode ~= "none" then | 186 | if opts.deps_mode ~= "none" then |
| 188 | writer.check_dependencies(nil, deps.get_deps_mode(args)) | 187 | deps.check_dependencies(nil, deps.get_deps_mode(args)) |
| 189 | end | 188 | end |
| 190 | return name, version | 189 | return name, version |
| 191 | end | 190 | end |
diff --git a/src/luarocks/cmd/install.lua b/src/luarocks/cmd/install.lua index 7102d857..e00b964d 100644 --- a/src/luarocks/cmd/install.lua +++ b/src/luarocks/cmd/install.lua | |||
| @@ -9,7 +9,7 @@ local fetch = require("luarocks.fetch") | |||
| 9 | local util = require("luarocks.util") | 9 | local util = require("luarocks.util") |
| 10 | local fs = require("luarocks.fs") | 10 | local fs = require("luarocks.fs") |
| 11 | local deps = require("luarocks.deps") | 11 | local deps = require("luarocks.deps") |
| 12 | local writer = require("luarocks.manif.writer") | 12 | local repo_writer = require("luarocks.repo_writer") |
| 13 | local remove = require("luarocks.remove") | 13 | local remove = require("luarocks.remove") |
| 14 | local search = require("luarocks.search") | 14 | local search = require("luarocks.search") |
| 15 | local queries = require("luarocks.queries") | 15 | local queries = require("luarocks.queries") |
| @@ -80,7 +80,7 @@ function install.install_binary_rock(rock_file, opts) | |||
| 80 | util.printout("Use --force to reinstall.") | 80 | util.printout("Use --force to reinstall.") |
| 81 | return name, version | 81 | return name, version |
| 82 | end | 82 | end |
| 83 | repos.delete_version(name, version, opts.deps_mode) | 83 | repo_writer.delete_version(name, version, opts.deps_mode) |
| 84 | end | 84 | end |
| 85 | 85 | ||
| 86 | local install_dir = path.install_dir(name, version) | 86 | local install_dir = path.install_dir(name, version) |
| @@ -103,17 +103,6 @@ function install.install_binary_rock(rock_file, opts) | |||
| 103 | if err then return nil, err, errcode end | 103 | if err then return nil, err, errcode end |
| 104 | end | 104 | end |
| 105 | 105 | ||
| 106 | -- For compatibility with .rock files built with LuaRocks 1 | ||
| 107 | if not fs.exists(path.rock_manifest_file(name, version)) then | ||
| 108 | ok, err = writer.make_rock_manifest(name, version) | ||
| 109 | if err then return nil, err end | ||
| 110 | end | ||
| 111 | |||
| 112 | if namespace then | ||
| 113 | ok, err = writer.make_namespace_file(name, version, namespace) | ||
| 114 | if err then return nil, err end | ||
| 115 | end | ||
| 116 | |||
| 117 | if deps_mode ~= "none" then | 106 | if deps_mode ~= "none" then |
| 118 | local deplock_dir = fs.exists(dir.path(".", "luarocks.lock")) | 107 | local deplock_dir = fs.exists(dir.path(".", "luarocks.lock")) |
| 119 | and "." | 108 | and "." |
| @@ -122,12 +111,12 @@ function install.install_binary_rock(rock_file, opts) | |||
| 122 | if err then return nil, err, errcode end | 111 | if err then return nil, err, errcode end |
| 123 | end | 112 | end |
| 124 | 113 | ||
| 125 | ok, err = repos.deploy_files(name, version, repos.should_wrap_bin_scripts(rockspec), deps_mode) | 114 | ok, err = repo_writer.deploy_files(name, version, repos.should_wrap_bin_scripts(rockspec), deps_mode, namespace) |
| 126 | if err then return nil, err end | 115 | if err then return nil, err end |
| 127 | 116 | ||
| 128 | util.remove_scheduled_function(rollback) | 117 | util.remove_scheduled_function(rollback) |
| 129 | rollback = util.schedule_function(function() | 118 | rollback = util.schedule_function(function() |
| 130 | repos.delete_version(name, version, deps_mode) | 119 | repo_writer.delete_version(name, version, deps_mode) |
| 131 | end) | 120 | end) |
| 132 | 121 | ||
| 133 | ok, err = repos.run_hook(rockspec, "post_install") | 122 | ok, err = repos.run_hook(rockspec, "post_install") |
| @@ -183,7 +172,7 @@ local function install_rock_file_deps(filename, opts) | |||
| 183 | local name, version = install.install_binary_rock_deps(filename, opts) | 172 | local name, version = install.install_binary_rock_deps(filename, opts) |
| 184 | if not name then return nil, version end | 173 | if not name then return nil, version end |
| 185 | 174 | ||
| 186 | writer.check_dependencies(nil, opts.deps_mode) | 175 | deps.check_dependencies(nil, opts.deps_mode) |
| 187 | return name, version | 176 | return name, version |
| 188 | end | 177 | end |
| 189 | 178 | ||
| @@ -206,7 +195,7 @@ local function install_rock_file(filename, opts) | |||
| 206 | end | 195 | end |
| 207 | end | 196 | end |
| 208 | 197 | ||
| 209 | writer.check_dependencies(nil, opts.deps_mode) | 198 | deps.check_dependencies(nil, opts.deps_mode) |
| 210 | return name, version | 199 | return name, version |
| 211 | end | 200 | end |
| 212 | 201 | ||
diff --git a/src/luarocks/cmd/make.lua b/src/luarocks/cmd/make.lua index e7db6aad..811078b8 100644 --- a/src/luarocks/cmd/make.lua +++ b/src/luarocks/cmd/make.lua | |||
| @@ -12,7 +12,6 @@ local fetch = require("luarocks.fetch") | |||
| 12 | local pack = require("luarocks.pack") | 12 | local pack = require("luarocks.pack") |
| 13 | local remove = require("luarocks.remove") | 13 | local remove = require("luarocks.remove") |
| 14 | local deps = require("luarocks.deps") | 14 | local deps = require("luarocks.deps") |
| 15 | local writer = require("luarocks.manif.writer") | ||
| 16 | local dir = require("luarocks.dir") | 15 | local dir = require("luarocks.dir") |
| 17 | local fs = require("luarocks.fs") | 16 | local fs = require("luarocks.fs") |
| 18 | 17 | ||
| @@ -151,7 +150,7 @@ function make.command(args) | |||
| 151 | end | 150 | end |
| 152 | end | 151 | end |
| 153 | 152 | ||
| 154 | writer.check_dependencies(nil, deps.get_deps_mode(args)) | 153 | deps.check_dependencies(nil, deps.get_deps_mode(args)) |
| 155 | return name, version | 154 | return name, version |
| 156 | end | 155 | end |
| 157 | end | 156 | end |
diff --git a/src/luarocks/cmd/purge.lua b/src/luarocks/cmd/purge.lua index 30811ddf..fda8ab88 100644 --- a/src/luarocks/cmd/purge.lua +++ b/src/luarocks/cmd/purge.lua | |||
| @@ -7,8 +7,7 @@ local util = require("luarocks.util") | |||
| 7 | local path = require("luarocks.path") | 7 | local path = require("luarocks.path") |
| 8 | local search = require("luarocks.search") | 8 | local search = require("luarocks.search") |
| 9 | local vers = require("luarocks.core.vers") | 9 | local vers = require("luarocks.core.vers") |
| 10 | local repos = require("luarocks.repos") | 10 | local repo_writer = require("luarocks.repo_writer") |
| 11 | local writer = require("luarocks.manif.writer") | ||
| 12 | local cfg = require("luarocks.core.cfg") | 11 | local cfg = require("luarocks.core.cfg") |
| 13 | local remove = require("luarocks.remove") | 12 | local remove = require("luarocks.remove") |
| 14 | local queries = require("luarocks.queries") | 13 | local queries = require("luarocks.queries") |
| @@ -58,14 +57,14 @@ function purge.command(args) | |||
| 58 | break | 57 | break |
| 59 | else | 58 | else |
| 60 | util.printout("Removing "..package.." "..version.."...") | 59 | util.printout("Removing "..package.." "..version.."...") |
| 61 | local ok, err = repos.delete_version(package, version, "none", true) | 60 | local ok, err = repo_writer.delete_version(package, version, "none", true) |
| 62 | if not ok then | 61 | if not ok then |
| 63 | util.printerr(err) | 62 | util.printerr(err) |
| 64 | end | 63 | end |
| 65 | end | 64 | end |
| 66 | end | 65 | end |
| 67 | end | 66 | end |
| 68 | return writer.make_manifest(cfg.rocks_dir, "one") | 67 | return repo_writer.refresh_manifest(cfg.rocks_dir) |
| 69 | end | 68 | end |
| 70 | 69 | ||
| 71 | purge.needs_lock = function() return true end | 70 | purge.needs_lock = function() return true end |
diff --git a/src/luarocks/cmd/remove.lua b/src/luarocks/cmd/remove.lua index 8b11bcd3..630303ca 100644 --- a/src/luarocks/cmd/remove.lua +++ b/src/luarocks/cmd/remove.lua | |||
| @@ -9,7 +9,6 @@ local cfg = require("luarocks.core.cfg") | |||
| 9 | local search = require("luarocks.search") | 9 | local search = require("luarocks.search") |
| 10 | local path = require("luarocks.path") | 10 | local path = require("luarocks.path") |
| 11 | local deps = require("luarocks.deps") | 11 | local deps = require("luarocks.deps") |
| 12 | local writer = require("luarocks.manif.writer") | ||
| 13 | local queries = require("luarocks.queries") | 12 | local queries = require("luarocks.queries") |
| 14 | 13 | ||
| 15 | function cmd_remove.add_to_parser(parser) | 14 | function cmd_remove.add_to_parser(parser) |
| @@ -63,7 +62,7 @@ function cmd_remove.command(args) | |||
| 63 | return nil, err | 62 | return nil, err |
| 64 | end | 63 | end |
| 65 | 64 | ||
| 66 | writer.check_dependencies(nil, deps.get_deps_mode(args)) | 65 | deps.check_dependencies(nil, deps.get_deps_mode(args)) |
| 67 | return true | 66 | return true |
| 68 | end | 67 | end |
| 69 | 68 | ||
diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index 2edee8a6..05cbbc2d 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua | |||
| @@ -849,4 +849,33 @@ function deps.get_deps_mode(args) | |||
| 849 | return args.deps_mode or cfg.deps_mode | 849 | return args.deps_mode or cfg.deps_mode |
| 850 | end | 850 | end |
| 851 | 851 | ||
| 852 | |||
| 853 | |||
| 854 | |||
| 855 | |||
| 856 | |||
| 857 | |||
| 858 | function deps.check_dependencies(repo, deps_mode) | ||
| 859 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | ||
| 860 | assert(type(deps_mode) == "string") | ||
| 861 | if deps_mode == "none" then deps_mode = cfg.deps_mode end | ||
| 862 | |||
| 863 | local manifest = manif.load_manifest(rocks_dir) | ||
| 864 | if not manifest then | ||
| 865 | return | ||
| 866 | end | ||
| 867 | |||
| 868 | for name, versions in util.sortedpairs(manifest.repository) do | ||
| 869 | for version, version_entries in util.sortedpairs(versions, vers.compare_versions) do | ||
| 870 | for _, entry in ipairs(version_entries) do | ||
| 871 | if entry.arch == "installed" then | ||
| 872 | if manifest.dependencies[name] and manifest.dependencies[name][version] then | ||
| 873 | deps.report_missing_dependencies(name, version, manifest.dependencies[name][version], deps_mode, util.get_rocks_provided()) | ||
| 874 | end | ||
| 875 | end | ||
| 876 | end | ||
| 877 | end | ||
| 878 | end | ||
| 879 | end | ||
| 880 | |||
| 852 | return deps | 881 | return deps |
diff --git a/src/luarocks/deps.tl b/src/luarocks/deps.tl index 7e6e39c8..d3172f3b 100644 --- a/src/luarocks/deps.tl +++ b/src/luarocks/deps.tl | |||
| @@ -97,7 +97,7 @@ end | |||
| 97 | -- 2. nil | 97 | -- 2. nil |
| 98 | -- 3. either 'dep' or an alternative query to be used | 98 | -- 3. either 'dep' or an alternative query to be used |
| 99 | -- 4. false | 99 | -- 4. false |
| 100 | local function match_dep(depq: Query, | 100 | local function match_dep(depq: Query, |
| 101 | get_versions: function(Query): {string}, {string: string | Tree}, string, boolean): string, string | Tree, Query, boolean | 101 | get_versions: function(Query): {string}, {string: string | Tree}, string, boolean): string, string | Tree, Query, boolean |
| 102 | 102 | ||
| 103 | local versions, locations, lockversion, provided = get_versions(depq) | 103 | local versions, locations, lockversion, provided = get_versions(depq) |
| @@ -126,7 +126,7 @@ local function match_dep(depq: Query, | |||
| 126 | return latest_vstring, locations[latest_vstring], depq, provided | 126 | return latest_vstring, locations[latest_vstring], depq, provided |
| 127 | end | 127 | end |
| 128 | 128 | ||
| 129 | local function match_all_deps(dependencies: {Query}, | 129 | local function match_all_deps(dependencies: {Query}, |
| 130 | get_versions: function(Query): {string}, {string: string | Tree}, string, boolean): {Query: Result}, {string: Query}, {string: Query} | 130 | get_versions: function(Query): {string}, {string: string | Tree}, string, boolean): {Query: Result}, {string: Query}, {string: Query} |
| 131 | 131 | ||
| 132 | local matched, missing, no_upgrade = {}, {}, {} | 132 | local matched, missing, no_upgrade = {}, {}, {} |
| @@ -300,11 +300,11 @@ function deps.fulfill_dependencies(rockspec: Rockspec, depskey: string, deps_mod | |||
| 300 | local get_versions = prepare_get_versions("none", rocks_provided, depskey) | 300 | local get_versions = prepare_get_versions("none", rocks_provided, depskey) |
| 301 | local dnsnamestr, dversionstr: string, string | 301 | local dnsnamestr, dversionstr: string, string |
| 302 | for dnsname, dversion in deplocks.each(depskey) do | 302 | for dnsname, dversion in deplocks.each(depskey) do |
| 303 | if dnsname is string then | 303 | if dnsname is string then |
| 304 | dnsnamestr = dnsname | 304 | dnsnamestr = dnsname |
| 305 | end | 305 | end |
| 306 | if dversion is string then | 306 | if dversion is string then |
| 307 | dversionstr = dversion | 307 | dversionstr = dversion |
| 308 | end | 308 | end |
| 309 | local dname, dnamespace = util.split_namespace(dnsnamestr) | 309 | local dname, dnamespace = util.split_namespace(dnsnamestr) |
| 310 | local depq = queries.new(dname, dnamespace, dversionstr) | 310 | local depq = queries.new(dname, dnamespace, dversionstr) |
| @@ -603,7 +603,7 @@ function deps.autodetect_external_dependencies(build: Build): {string : {string | |||
| 603 | local librariesstr: string | {string} = data.libraries | 603 | local librariesstr: string | {string} = data.libraries |
| 604 | if librariesstr is string then | 604 | if librariesstr is string then |
| 605 | libraries = { librariesstr } | 605 | libraries = { librariesstr } |
| 606 | else | 606 | else |
| 607 | libraries = librariesstr | 607 | libraries = librariesstr |
| 608 | end | 608 | end |
| 609 | local incdirs = {} | 609 | local incdirs = {} |
| @@ -849,4 +849,33 @@ function deps.get_deps_mode(args: {string: string}): string | |||
| 849 | return args.deps_mode or cfg.deps_mode | 849 | return args.deps_mode or cfg.deps_mode |
| 850 | end | 850 | end |
| 851 | 851 | ||
| 852 | --- Report missing dependencies for all rocks installed in a repository. | ||
| 853 | -- @param repo string or nil: Pathname of a local repository. If not given, | ||
| 854 | -- the default local repository is used. | ||
| 855 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, | ||
| 856 | -- "all" for all trees, "order" for all trees with priority >= the current default, | ||
| 857 | -- "none" for using the default dependency mode from the configuration. | ||
| 858 | function deps.check_dependencies(repo: string, deps_mode: string) | ||
| 859 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | ||
| 860 | assert(type(deps_mode) == "string") | ||
| 861 | if deps_mode == "none" then deps_mode = cfg.deps_mode end | ||
| 862 | |||
| 863 | local manifest = manif.load_manifest(rocks_dir) | ||
| 864 | if not manifest then | ||
| 865 | return | ||
| 866 | end | ||
| 867 | |||
| 868 | for name, versions in util.sortedpairs(manifest.repository) do | ||
| 869 | for version, version_entries in util.sortedpairs(versions, vers.compare_versions) do | ||
| 870 | for _, entry in ipairs(version_entries) do | ||
| 871 | if entry.arch == "installed" then | ||
| 872 | if manifest.dependencies[name] and manifest.dependencies[name][version] then | ||
| 873 | deps.report_missing_dependencies(name, version, manifest.dependencies[name][version], deps_mode, util.get_rocks_provided()) | ||
| 874 | end | ||
| 875 | end | ||
| 876 | end | ||
| 877 | end | ||
| 878 | end | ||
| 879 | end | ||
| 880 | |||
| 852 | return deps | 881 | return deps |
diff --git a/src/luarocks/manif/writer.lua b/src/luarocks/manif/writer.lua index 36f5f57f..72d35754 100644 --- a/src/luarocks/manif/writer.lua +++ b/src/luarocks/manif/writer.lua | |||
| @@ -466,33 +466,4 @@ function writer.remove_from_manifest(name, version, repo, deps_mode) | |||
| 466 | return save_table(rocks_dir, "manifest", manifest) | 466 | return save_table(rocks_dir, "manifest", manifest) |
| 467 | end | 467 | end |
| 468 | 468 | ||
| 469 | --- Report missing dependencies for all rocks installed in a repository. | ||
| 470 | -- @param repo string or nil: Pathname of a local repository. If not given, | ||
| 471 | -- the default local repository is used. | ||
| 472 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, | ||
| 473 | -- "all" for all trees, "order" for all trees with priority >= the current default, | ||
| 474 | -- "none" for using the default dependency mode from the configuration. | ||
| 475 | function writer.check_dependencies(repo, deps_mode) | ||
| 476 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | ||
| 477 | assert(type(deps_mode) == "string") | ||
| 478 | if deps_mode == "none" then deps_mode = cfg.deps_mode end | ||
| 479 | |||
| 480 | local manifest = manif.load_manifest(rocks_dir) | ||
| 481 | if not manifest then | ||
| 482 | return | ||
| 483 | end | ||
| 484 | |||
| 485 | for name, versions in util.sortedpairs(manifest.repository) do | ||
| 486 | for version, version_entries in util.sortedpairs(versions, vers.compare_versions) do | ||
| 487 | for _, entry in ipairs(version_entries) do | ||
| 488 | if entry.arch == "installed" then | ||
| 489 | if manifest.dependencies[name] and manifest.dependencies[name][version] then | ||
| 490 | deps.report_missing_dependencies(name, version, manifest.dependencies[name][version], deps_mode, util.get_rocks_provided()) | ||
| 491 | end | ||
| 492 | end | ||
| 493 | end | ||
| 494 | end | ||
| 495 | end | ||
| 496 | end | ||
| 497 | |||
| 498 | return writer | 469 | return writer |
diff --git a/src/luarocks/manif/writer.tl b/src/luarocks/manif/writer.tl index 625fba79..ee4144e0 100644 --- a/src/luarocks/manif/writer.tl +++ b/src/luarocks/manif/writer.tl | |||
| @@ -467,33 +467,4 @@ function writer.remove_from_manifest(name, version, repo, deps_mode) | |||
| 467 | return save_table(rocks_dir, "manifest", manifest) | 467 | return save_table(rocks_dir, "manifest", manifest) |
| 468 | end | 468 | end |
| 469 | 469 | ||
| 470 | --- Report missing dependencies for all rocks installed in a repository. | ||
| 471 | -- @param repo string or nil: Pathname of a local repository. If not given, | ||
| 472 | -- the default local repository is used. | ||
| 473 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, | ||
| 474 | -- "all" for all trees, "order" for all trees with priority >= the current default, | ||
| 475 | -- "none" for using the default dependency mode from the configuration. | ||
| 476 | function writer.check_dependencies(repo, deps_mode) | ||
| 477 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | ||
| 478 | assert(type(deps_mode) == "string") | ||
| 479 | if deps_mode == "none" then deps_mode = cfg.deps_mode end | ||
| 480 | |||
| 481 | local manifest = manif.load_manifest(rocks_dir) | ||
| 482 | if not manifest then | ||
| 483 | return | ||
| 484 | end | ||
| 485 | |||
| 486 | for name, versions in util.sortedpairs(manifest.repository) do | ||
| 487 | for version, version_entries in util.sortedpairs(versions, vers.compare_versions) do | ||
| 488 | for _, entry in ipairs(version_entries) do | ||
| 489 | if entry.arch == "installed" then | ||
| 490 | if manifest.dependencies[name] and manifest.dependencies[name][version] then | ||
| 491 | deps.report_missing_dependencies(name, version, manifest.dependencies[name][version], deps_mode, util.get_rocks_provided()) | ||
| 492 | end | ||
| 493 | end | ||
| 494 | end | ||
| 495 | end | ||
| 496 | end | ||
| 497 | end | ||
| 498 | |||
| 499 | return writer | 470 | return writer |
diff --git a/src/luarocks/remove.lua b/src/luarocks/remove.lua index be8517f6..e00097fa 100644 --- a/src/luarocks/remove.lua +++ b/src/luarocks/remove.lua | |||
| @@ -4,6 +4,7 @@ local search = require("luarocks.search") | |||
| 4 | local deps = require("luarocks.deps") | 4 | local deps = require("luarocks.deps") |
| 5 | local fetch = require("luarocks.fetch") | 5 | local fetch = require("luarocks.fetch") |
| 6 | local repos = require("luarocks.repos") | 6 | local repos = require("luarocks.repos") |
| 7 | local repo_writer = require("luarocks.repo_writer") | ||
| 7 | local path = require("luarocks.path") | 8 | local path = require("luarocks.path") |
| 8 | local util = require("luarocks.util") | 9 | local util = require("luarocks.util") |
| 9 | local cfg = require("luarocks.core.cfg") | 10 | local cfg = require("luarocks.core.cfg") |
| @@ -55,7 +56,7 @@ local function delete_versions(name, versions, deps_mode) | |||
| 55 | 56 | ||
| 56 | for version, _ in pairs(versions) do | 57 | for version, _ in pairs(versions) do |
| 57 | util.printout("Removing "..name.." "..version.."...") | 58 | util.printout("Removing "..name.." "..version.."...") |
| 58 | local ok, err = repos.delete_version(name, version, deps_mode) | 59 | local ok, err = repo_writer.delete_version(name, version, deps_mode) |
| 59 | if not ok then return nil, err end | 60 | if not ok then return nil, err end |
| 60 | end | 61 | end |
| 61 | 62 | ||
diff --git a/src/luarocks/repo_writer.lua b/src/luarocks/repo_writer.lua new file mode 100644 index 00000000..698af976 --- /dev/null +++ b/src/luarocks/repo_writer.lua | |||
| @@ -0,0 +1,52 @@ | |||
| 1 | local repo_writer = {} | ||
| 2 | |||
| 3 | local fs = require("luarocks.fs") | ||
| 4 | local path = require("luarocks.path") | ||
| 5 | local repos = require("luarocks.repos") | ||
| 6 | local writer = require("luarocks.manif.writer") | ||
| 7 | |||
| 8 | function repo_writer.deploy_files(name, version, wrap_bin_scripts, deps_mode, namespace) | ||
| 9 | local ok, err | ||
| 10 | |||
| 11 | if not fs.exists(path.rock_manifest_file(name, version)) then | ||
| 12 | ok, err = writer.make_rock_manifest(name, version) | ||
| 13 | if err then | ||
| 14 | return nil, err | ||
| 15 | end | ||
| 16 | end | ||
| 17 | |||
| 18 | if namespace then | ||
| 19 | ok, err = writer.make_namespace_file(name, version, namespace) | ||
| 20 | if not ok then | ||
| 21 | return nil, err | ||
| 22 | end | ||
| 23 | end | ||
| 24 | |||
| 25 | ok, err = repos.deploy_local_files(name, version, wrap_bin_scripts, deps_mode) | ||
| 26 | if not ok then | ||
| 27 | return nil, err | ||
| 28 | end | ||
| 29 | |||
| 30 | ok, err = writer.add_to_manifest(name, version, nil, deps_mode) | ||
| 31 | return ok, err | ||
| 32 | end | ||
| 33 | |||
| 34 | function repo_writer.delete_version(name, version, deps_mode, quick) | ||
| 35 | local ok, err, op = repos.delete_local_version(name, version, deps_mode, quick) | ||
| 36 | |||
| 37 | if op == "remove" then | ||
| 38 | local rok, rerr = writer.remove_from_manifest(name, version, nil, deps_mode) | ||
| 39 | if ok and not rok then | ||
| 40 | ok, err = rok, rerr | ||
| 41 | end | ||
| 42 | end | ||
| 43 | |||
| 44 | return ok, err | ||
| 45 | end | ||
| 46 | |||
| 47 | function repo_writer.refresh_manifest(rocks_dir) | ||
| 48 | return writer.make_manifest(rocks_dir, "one") | ||
| 49 | end | ||
| 50 | |||
| 51 | return repo_writer | ||
| 52 | |||
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua index 764fe3ad..2e71b3f7 100644 --- a/src/luarocks/repos.lua +++ b/src/luarocks/repos.lua | |||
| @@ -12,18 +12,6 @@ local vers = require("luarocks.core.vers") | |||
| 12 | 12 | ||
| 13 | local unpack = unpack or table.unpack -- luacheck: ignore 211 | 13 | local unpack = unpack or table.unpack -- luacheck: ignore 211 |
| 14 | 14 | ||
| 15 | --- Get type and name of an item (a module or a command) provided by a file. | ||
| 16 | -- @param deploy_type string: rock manifest subtree the file comes from ("bin", "lua", or "lib"). | ||
| 17 | -- @param file_path string: path to the file relatively to deploy_type subdirectory. | ||
| 18 | -- @return (string, string): item type ("module" or "command") and name. | ||
| 19 | local function get_provided_item(deploy_type, file_path) | ||
| 20 | assert(type(deploy_type) == "string") | ||
| 21 | assert(type(file_path) == "string") | ||
| 22 | local item_type = deploy_type == "bin" and "command" or "module" | ||
| 23 | local item_name = item_type == "command" and file_path or path.path_to_module(file_path) | ||
| 24 | return item_type, item_name | ||
| 25 | end | ||
| 26 | |||
| 27 | -- Tree of files installed by a package are stored | 15 | -- Tree of files installed by a package are stored |
| 28 | -- in its rock manifest. Some of these files have to | 16 | -- in its rock manifest. Some of these files have to |
| 29 | -- be deployed to locations where Lua can load them as | 17 | -- be deployed to locations where Lua can load them as |
| @@ -94,7 +82,7 @@ end | |||
| 94 | local function store_package_data(result, rock_manifest, deploy_type) | 82 | local function store_package_data(result, rock_manifest, deploy_type) |
| 95 | if rock_manifest[deploy_type] then | 83 | if rock_manifest[deploy_type] then |
| 96 | repos.recurse_rock_manifest_entry(rock_manifest[deploy_type], function(file_path) | 84 | repos.recurse_rock_manifest_entry(rock_manifest[deploy_type], function(file_path) |
| 97 | local _, item_name = get_provided_item(deploy_type, file_path) | 85 | local _, item_name = manif.get_provided_item(deploy_type, file_path) |
| 98 | result[item_name] = file_path | 86 | result[item_name] = file_path |
| 99 | return true | 87 | return true |
| 100 | end) | 88 | end) |
| @@ -246,7 +234,7 @@ local function get_deploy_paths(name, version, deploy_type, file_path, repo) | |||
| 246 | end | 234 | end |
| 247 | 235 | ||
| 248 | local function check_spot_if_available(name, version, deploy_type, file_path) | 236 | local function check_spot_if_available(name, version, deploy_type, file_path) |
| 249 | local item_type, item_name = get_provided_item(deploy_type, file_path) | 237 | local item_type, item_name = manif.get_provided_item(deploy_type, file_path) |
| 250 | local cur_name, cur_version = manif.get_current_provider(item_type, item_name) | 238 | local cur_name, cur_version = manif.get_current_provider(item_type, item_name) |
| 251 | 239 | ||
| 252 | -- older versions of LuaRocks (< 3) registered "foo.init" files as "foo" | 240 | -- older versions of LuaRocks (< 3) registered "foo.init" files as "foo" |
| @@ -437,7 +425,7 @@ end | |||
| 437 | -- @param deps_mode: string: Which trees to check dependencies for: | 425 | -- @param deps_mode: string: Which trees to check dependencies for: |
| 438 | -- "one" for the current default tree, "all" for all trees, | 426 | -- "one" for the current default tree, "all" for all trees, |
| 439 | -- "order" for all trees with priority >= the current default, "none" for no trees. | 427 | -- "order" for all trees with priority >= the current default, "none" for no trees. |
| 440 | function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) | 428 | function repos.deploy_local_files(name, version, wrap_bin_scripts, deps_mode) |
| 441 | assert(type(name) == "string" and not name:match("/")) | 429 | assert(type(name) == "string" and not name:match("/")) |
| 442 | assert(type(version) == "string") | 430 | assert(type(version) == "string") |
| 443 | assert(type(wrap_bin_scripts) == "boolean") | 431 | assert(type(wrap_bin_scripts) == "boolean") |
| @@ -546,8 +534,7 @@ function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) | |||
| 546 | return nil, err | 534 | return nil, err |
| 547 | end | 535 | end |
| 548 | 536 | ||
| 549 | local writer = require("luarocks.manif.writer") | 537 | return true |
| 550 | return writer.add_to_manifest(name, version, nil, deps_mode) | ||
| 551 | end | 538 | end |
| 552 | 539 | ||
| 553 | local function add_to_double_checks(double_checks, name, version) | 540 | local function add_to_double_checks(double_checks, name, version) |
| @@ -582,7 +569,7 @@ end | |||
| 582 | -- of another version that provides the same module that | 569 | -- of another version that provides the same module that |
| 583 | -- was deleted. This is used during 'purge', as every module | 570 | -- was deleted. This is used during 'purge', as every module |
| 584 | -- will be eventually deleted. | 571 | -- will be eventually deleted. |
| 585 | function repos.delete_version(name, version, deps_mode, quick) | 572 | function repos.delete_local_version(name, version, deps_mode, quick) |
| 586 | assert(type(name) == "string" and not name:match("/")) | 573 | assert(type(name) == "string" and not name:match("/")) |
| 587 | assert(type(version) == "string") | 574 | assert(type(version) == "string") |
| 588 | assert(type(deps_mode) == "string") | 575 | assert(type(deps_mode) == "string") |
| @@ -590,11 +577,9 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 590 | local rock_manifest, load_err = manif.load_rock_manifest(name, version) | 577 | local rock_manifest, load_err = manif.load_rock_manifest(name, version) |
| 591 | if not rock_manifest then | 578 | if not rock_manifest then |
| 592 | if not quick then | 579 | if not quick then |
| 593 | local writer = require("luarocks.manif.writer") | 580 | return nil, "rock_manifest file not found for "..name.." "..version.." - removed entry from the manifest", "remove" |
| 594 | writer.remove_from_manifest(name, version, nil, deps_mode) | ||
| 595 | return nil, "rock_manifest file not found for "..name.." "..version.." - removed entry from the manifest" | ||
| 596 | end | 581 | end |
| 597 | return nil, load_err | 582 | return nil, load_err, "fail" |
| 598 | end | 583 | end |
| 599 | 584 | ||
| 600 | local repo = cfg.root_dir | 585 | local repo = cfg.root_dir |
| @@ -677,7 +662,7 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 677 | 662 | ||
| 678 | local ok, err = double_check_all(double_checks, repo) | 663 | local ok, err = double_check_all(double_checks, repo) |
| 679 | if not ok then | 664 | if not ok then |
| 680 | return nil, err | 665 | return nil, err, "fail" |
| 681 | end | 666 | end |
| 682 | end | 667 | end |
| 683 | 668 | ||
| @@ -687,11 +672,10 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 687 | end | 672 | end |
| 688 | 673 | ||
| 689 | if quick then | 674 | if quick then |
| 690 | return true | 675 | return true, nil, "ok" |
| 691 | end | 676 | end |
| 692 | 677 | ||
| 693 | local writer = require("luarocks.manif.writer") | 678 | return true, nil, "remove" |
| 694 | return writer.remove_from_manifest(name, version, nil, deps_mode) | ||
| 695 | end | 679 | end |
| 696 | 680 | ||
| 697 | return repos | 681 | return repos |
diff --git a/src/luarocks/repos.tl b/src/luarocks/repos.tl index 14f1658c..3af53575 100644 --- a/src/luarocks/repos.tl +++ b/src/luarocks/repos.tl | |||
| @@ -435,7 +435,7 @@ end | |||
| 435 | -- @param deps_mode: string: Which trees to check dependencies for: | 435 | -- @param deps_mode: string: Which trees to check dependencies for: |
| 436 | -- "one" for the current default tree, "all" for all trees, | 436 | -- "one" for the current default tree, "all" for all trees, |
| 437 | -- "order" for all trees with priority >= the current default, "none" for no trees. | 437 | -- "order" for all trees with priority >= the current default, "none" for no trees. |
| 438 | function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) | 438 | function repos.deploy_local_files(name, version, wrap_bin_scripts, deps_mode) |
| 439 | assert(type(name) == "string" and not name:match("/")) | 439 | assert(type(name) == "string" and not name:match("/")) |
| 440 | assert(type(version) == "string") | 440 | assert(type(version) == "string") |
| 441 | assert(type(wrap_bin_scripts) == "boolean") | 441 | assert(type(wrap_bin_scripts) == "boolean") |
| @@ -544,8 +544,7 @@ function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) | |||
| 544 | return nil, err | 544 | return nil, err |
| 545 | end | 545 | end |
| 546 | 546 | ||
| 547 | local writer = require("luarocks.manif.writer") | 547 | return true |
| 548 | return writer.add_to_manifest(name, version, nil, deps_mode) | ||
| 549 | end | 548 | end |
| 550 | 549 | ||
| 551 | local function add_to_double_checks(double_checks, name, version) | 550 | local function add_to_double_checks(double_checks, name, version) |
| @@ -580,7 +579,7 @@ end | |||
| 580 | -- of another version that provides the same module that | 579 | -- of another version that provides the same module that |
| 581 | -- was deleted. This is used during 'purge', as every module | 580 | -- was deleted. This is used during 'purge', as every module |
| 582 | -- will be eventually deleted. | 581 | -- will be eventually deleted. |
| 583 | function repos.delete_version(name, version, deps_mode, quick) | 582 | function repos.delete_local_version(name, version, deps_mode, quick) |
| 584 | assert(type(name) == "string" and not name:match("/")) | 583 | assert(type(name) == "string" and not name:match("/")) |
| 585 | assert(type(version) == "string") | 584 | assert(type(version) == "string") |
| 586 | assert(type(deps_mode) == "string") | 585 | assert(type(deps_mode) == "string") |
| @@ -588,11 +587,9 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 588 | local rock_manifest, load_err = manif.load_rock_manifest(name, version) | 587 | local rock_manifest, load_err = manif.load_rock_manifest(name, version) |
| 589 | if not rock_manifest then | 588 | if not rock_manifest then |
| 590 | if not quick then | 589 | if not quick then |
| 591 | local writer = require("luarocks.manif.writer") | 590 | return nil, "rock_manifest file not found for "..name.." "..version.." - removed entry from the manifest", "remove" |
| 592 | writer.remove_from_manifest(name, version, nil, deps_mode) | ||
| 593 | return nil, "rock_manifest file not found for "..name.." "..version.." - removed entry from the manifest" | ||
| 594 | end | 591 | end |
| 595 | return nil, load_err | 592 | return nil, load_err, "fail" |
| 596 | end | 593 | end |
| 597 | 594 | ||
| 598 | local repo = cfg.root_dir | 595 | local repo = cfg.root_dir |
| @@ -675,7 +672,7 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 675 | 672 | ||
| 676 | local ok, err = double_check_all(double_checks, repo) | 673 | local ok, err = double_check_all(double_checks, repo) |
| 677 | if not ok then | 674 | if not ok then |
| 678 | return nil, err | 675 | return nil, err, "fail" |
| 679 | end | 676 | end |
| 680 | end | 677 | end |
| 681 | 678 | ||
| @@ -685,11 +682,10 @@ function repos.delete_version(name, version, deps_mode, quick) | |||
| 685 | end | 682 | end |
| 686 | 683 | ||
| 687 | if quick then | 684 | if quick then |
| 688 | return true | 685 | return true, nil, "ok" |
| 689 | end | 686 | end |
| 690 | 687 | ||
| 691 | local writer = require("luarocks.manif.writer") | 688 | return true, nil, "remove" |
| 692 | return writer.remove_from_manifest(name, version, nil, deps_mode) | ||
| 693 | end | 689 | end |
| 694 | 690 | ||
| 695 | return repos | 691 | return repos |
