aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2024-08-12 14:35:19 -0300
committerHisham Muhammad <hisham@gobolinux.org>2024-08-12 15:00:41 -0300
commita6c0f193b502783732b083dacc07891237629d58 (patch)
tree9fde4eb826b714e7199d4fd45c089c6dd0b7c913
parenta121c775f9a08e76ed9cb7f2313668f38ac9c67b (diff)
downloadluarocks-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.lua35
-rw-r--r--src/luarocks/cmd/build.lua3
-rw-r--r--src/luarocks/cmd/install.lua23
-rw-r--r--src/luarocks/cmd/make.lua3
-rw-r--r--src/luarocks/cmd/purge.lua7
-rw-r--r--src/luarocks/cmd/remove.lua3
-rw-r--r--src/luarocks/deps.lua29
-rw-r--r--src/luarocks/deps.tl43
-rw-r--r--src/luarocks/manif/writer.lua29
-rw-r--r--src/luarocks/manif/writer.tl29
-rw-r--r--src/luarocks/remove.lua3
-rw-r--r--src/luarocks/repo_writer.lua52
-rw-r--r--src/luarocks/repos.lua36
-rw-r--r--src/luarocks/repos.tl20
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")
11local cfg = require("luarocks.core.cfg") 11local cfg = require("luarocks.core.cfg")
12local vers = require("luarocks.core.vers") 12local vers = require("luarocks.core.vers")
13local repos = require("luarocks.repos") 13local repos = require("luarocks.repos")
14local writer = require("luarocks.manif.writer") 14local repo_writer = require("luarocks.repo_writer")
15local deplocks = require("luarocks.deplocks") 15local deplocks = require("luarocks.deplocks")
16 16
17do 17do
@@ -349,25 +349,6 @@ do
349 end 349 end
350end 350end
351 351
352local 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
369end
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")
13local remove = require("luarocks.remove") 13local remove = require("luarocks.remove")
14local cfg = require("luarocks.core.cfg") 14local cfg = require("luarocks.core.cfg")
15local build = require("luarocks.build") 15local build = require("luarocks.build")
16local writer = require("luarocks.manif.writer")
17local search = require("luarocks.search") 16local search = require("luarocks.search")
18local make = require("luarocks.cmd.make") 17local make = require("luarocks.cmd.make")
19local repos = require("luarocks.repos") 18local 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
191end 190end
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")
9local util = require("luarocks.util") 9local util = require("luarocks.util")
10local fs = require("luarocks.fs") 10local fs = require("luarocks.fs")
11local deps = require("luarocks.deps") 11local deps = require("luarocks.deps")
12local writer = require("luarocks.manif.writer") 12local repo_writer = require("luarocks.repo_writer")
13local remove = require("luarocks.remove") 13local remove = require("luarocks.remove")
14local search = require("luarocks.search") 14local search = require("luarocks.search")
15local queries = require("luarocks.queries") 15local 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
188end 177end
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
211end 200end
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")
12local pack = require("luarocks.pack") 12local pack = require("luarocks.pack")
13local remove = require("luarocks.remove") 13local remove = require("luarocks.remove")
14local deps = require("luarocks.deps") 14local deps = require("luarocks.deps")
15local writer = require("luarocks.manif.writer")
16local dir = require("luarocks.dir") 15local dir = require("luarocks.dir")
17local fs = require("luarocks.fs") 16local 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
157end 156end
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")
7local path = require("luarocks.path") 7local path = require("luarocks.path")
8local search = require("luarocks.search") 8local search = require("luarocks.search")
9local vers = require("luarocks.core.vers") 9local vers = require("luarocks.core.vers")
10local repos = require("luarocks.repos") 10local repo_writer = require("luarocks.repo_writer")
11local writer = require("luarocks.manif.writer")
12local cfg = require("luarocks.core.cfg") 11local cfg = require("luarocks.core.cfg")
13local remove = require("luarocks.remove") 12local remove = require("luarocks.remove")
14local queries = require("luarocks.queries") 13local 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)
69end 68end
70 69
71purge.needs_lock = function() return true end 70purge.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")
9local search = require("luarocks.search") 9local search = require("luarocks.search")
10local path = require("luarocks.path") 10local path = require("luarocks.path")
11local deps = require("luarocks.deps") 11local deps = require("luarocks.deps")
12local writer = require("luarocks.manif.writer")
13local queries = require("luarocks.queries") 12local queries = require("luarocks.queries")
14 13
15function cmd_remove.add_to_parser(parser) 14function 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
68end 67end
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
850end 850end
851 851
852
853
854
855
856
857
858function 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
879end
880
852return deps 881return 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
100local function match_dep(depq: Query, 100local 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
127end 127end
128 128
129local function match_all_deps(dependencies: {Query}, 129local 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
850end 850end
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.
858function 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
879end
880
852return deps 881return 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)
467end 467end
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.
475function 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
496end
497
498return writer 469return 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)
468end 468end
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.
476function 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
497end
498
499return writer 470return 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")
4local deps = require("luarocks.deps") 4local deps = require("luarocks.deps")
5local fetch = require("luarocks.fetch") 5local fetch = require("luarocks.fetch")
6local repos = require("luarocks.repos") 6local repos = require("luarocks.repos")
7local repo_writer = require("luarocks.repo_writer")
7local path = require("luarocks.path") 8local path = require("luarocks.path")
8local util = require("luarocks.util") 9local util = require("luarocks.util")
9local cfg = require("luarocks.core.cfg") 10local 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 @@
1local repo_writer = {}
2
3local fs = require("luarocks.fs")
4local path = require("luarocks.path")
5local repos = require("luarocks.repos")
6local writer = require("luarocks.manif.writer")
7
8function 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
32end
33
34function 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
45end
46
47function repo_writer.refresh_manifest(rocks_dir)
48 return writer.make_manifest(rocks_dir, "one")
49end
50
51return 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
13local unpack = unpack or table.unpack -- luacheck: ignore 211 13local 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.
19local 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
25end
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
94local function store_package_data(result, rock_manifest, deploy_type) 82local 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)
246end 234end
247 235
248local function check_spot_if_available(name, version, deploy_type, file_path) 236local 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.
440function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) 428function 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)
551end 538end
552 539
553local function add_to_double_checks(double_checks, name, version) 540local 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.
585function repos.delete_version(name, version, deps_mode, quick) 572function 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)
695end 679end
696 680
697return repos 681return 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.
438function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) 438function 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)
549end 548end
550 549
551local function add_to_double_checks(double_checks, name, version) 550local 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.
583function repos.delete_version(name, version, deps_mode, quick) 582function 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)
693end 689end
694 690
695return repos 691return repos