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 |