diff options
author | Hisham <hisham@gobolinux.org> | 2016-10-18 18:06:10 -0400 |
---|---|---|
committer | Hisham <hisham@gobolinux.org> | 2016-10-18 18:06:10 -0400 |
commit | f83a936687d33b9b5ec9211d8b5534650b471385 (patch) | |
tree | 24fe6be0ed24c7b51bf77de1b1f0036f0eb4988d | |
parent | 2f67a04c91c5088d78d5f18013dded4f89382ff3 (diff) | |
download | luarocks-f83a936687d33b9b5ec9211d8b5534650b471385.tar.gz luarocks-f83a936687d33b9b5ec9211d8b5534650b471385.tar.bz2 luarocks-f83a936687d33b9b5ec9211d8b5534650b471385.zip |
Regenerate manifest every time we delete a version.
This is a naive implementation of the solution suggested by @mpeterv for #268.
I'm merging this since it does produce more correct behavior,
at the cost of a performance regression. We need a function akin to
update_manifest for removing packages from a manifest.
-rw-r--r-- | src/luarocks/build.lua | 4 | ||||
-rw-r--r-- | src/luarocks/install.lua | 6 | ||||
-rw-r--r-- | src/luarocks/manif.lua | 2 | ||||
-rw-r--r-- | src/luarocks/purge.lua | 2 | ||||
-rw-r--r-- | src/luarocks/remove.lua | 11 | ||||
-rw-r--r-- | src/luarocks/repos.lua | 13 |
6 files changed, 24 insertions, 14 deletions
diff --git a/src/luarocks/build.lua b/src/luarocks/build.lua index f87b2f1b..f2784a3a 100644 --- a/src/luarocks/build.lua +++ b/src/luarocks/build.lua | |||
@@ -202,7 +202,7 @@ function build.build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_m | |||
202 | end | 202 | end |
203 | 203 | ||
204 | if repos.is_installed(name, version) then | 204 | if repos.is_installed(name, version) then |
205 | repos.delete_version(name, version) | 205 | repos.delete_version(name, version, deps_mode) |
206 | end | 206 | end |
207 | 207 | ||
208 | if not minimal_mode then | 208 | if not minimal_mode then |
@@ -325,7 +325,7 @@ function build.build_rockspec(rockspec_file, need_to_fetch, minimal_mode, deps_m | |||
325 | 325 | ||
326 | util.remove_scheduled_function(rollback) | 326 | util.remove_scheduled_function(rollback) |
327 | rollback = util.schedule_function(function() | 327 | rollback = util.schedule_function(function() |
328 | repos.delete_version(name, version) | 328 | repos.delete_version(name, version, deps_mode) |
329 | end) | 329 | end) |
330 | 330 | ||
331 | ok, err = repos.run_hook(rockspec, "post_install") | 331 | ok, err = repos.run_hook(rockspec, "post_install") |
diff --git a/src/luarocks/install.lua b/src/luarocks/install.lua index acbf584a..daebfc70 100644 --- a/src/luarocks/install.lua +++ b/src/luarocks/install.lua | |||
@@ -50,7 +50,7 @@ function install.install_binary_rock(rock_file, deps_mode) | |||
50 | return nil, "Incompatible architecture "..arch, "arch" | 50 | return nil, "Incompatible architecture "..arch, "arch" |
51 | end | 51 | end |
52 | if repos.is_installed(name, version) then | 52 | if repos.is_installed(name, version) then |
53 | repos.delete_version(name, version) | 53 | repos.delete_version(name, version, deps_mode) |
54 | end | 54 | end |
55 | 55 | ||
56 | local rollback = util.schedule_function(function() | 56 | local rollback = util.schedule_function(function() |
@@ -89,7 +89,7 @@ function install.install_binary_rock(rock_file, deps_mode) | |||
89 | 89 | ||
90 | util.remove_scheduled_function(rollback) | 90 | util.remove_scheduled_function(rollback) |
91 | rollback = util.schedule_function(function() | 91 | rollback = util.schedule_function(function() |
92 | repos.delete_version(name, version) | 92 | repos.delete_version(name, version, deps_mode) |
93 | end) | 93 | end) |
94 | 94 | ||
95 | ok, err = repos.run_hook(rockspec, "post_install") | 95 | ok, err = repos.run_hook(rockspec, "post_install") |
@@ -168,7 +168,7 @@ function install.command(flags, name, version) | |||
168 | ok, err = install.install_binary_rock(name, deps.get_deps_mode(flags)) | 168 | ok, err = install.install_binary_rock(name, deps.get_deps_mode(flags)) |
169 | end | 169 | end |
170 | if not ok then return nil, err end | 170 | if not ok then return nil, err end |
171 | local name, version = ok, err | 171 | name, version = ok, err |
172 | if (not flags["only-deps"]) and (not flags["keep"]) and not cfg.keep_other_versions then | 172 | if (not flags["only-deps"]) and (not flags["keep"]) and not cfg.keep_other_versions then |
173 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) | 173 | local ok, err = remove.remove_other_versions(name, version, flags["force"], flags["force-fast"]) |
174 | if not ok then util.printerr(err) end | 174 | if not ok then util.printerr(err) end |
diff --git a/src/luarocks/manif.lua b/src/luarocks/manif.lua index 48b4f23d..a8bbf279 100644 --- a/src/luarocks/manif.lua +++ b/src/luarocks/manif.lua | |||
@@ -365,7 +365,7 @@ end | |||
365 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, | 365 | -- @param deps_mode string: Dependency mode: "one" for the current default tree, |
366 | -- "all" for all trees, "order" for all trees with priority >= the current default, | 366 | -- "all" for all trees, "order" for all trees with priority >= the current default, |
367 | -- "none" for the default dependency mode from the configuration. | 367 | -- "none" for the default dependency mode from the configuration. |
368 | -- @param versioned boolean: if versioned versions of the manifest should be created. | 368 | -- @param remote boolean: 'true' if making a manifest for a rocks server. |
369 | -- @return boolean or (nil, string): True if manifest was generated, | 369 | -- @return boolean or (nil, string): True if manifest was generated, |
370 | -- or nil and an error message. | 370 | -- or nil and an error message. |
371 | function manif.make_manifest(repo, deps_mode, remote) | 371 | function manif.make_manifest(repo, deps_mode, remote) |
diff --git a/src/luarocks/purge.lua b/src/luarocks/purge.lua index 1ce46c0f..17724e84 100644 --- a/src/luarocks/purge.lua +++ b/src/luarocks/purge.lua | |||
@@ -66,7 +66,7 @@ function purge.command(flags) | |||
66 | break | 66 | break |
67 | else | 67 | else |
68 | util.printout("Removing "..package.." "..version.."...") | 68 | util.printout("Removing "..package.." "..version.."...") |
69 | local ok, err = repos.delete_version(package, version, true) | 69 | local ok, err = repos.delete_version(package, version, "none", true) |
70 | if not ok then | 70 | if not ok then |
71 | util.printerr(err) | 71 | util.printerr(err) |
72 | end | 72 | end |
diff --git a/src/luarocks/remove.lua b/src/luarocks/remove.lua index d72fabaf..82c9818b 100644 --- a/src/luarocks/remove.lua +++ b/src/luarocks/remove.lua | |||
@@ -62,12 +62,15 @@ end | |||
62 | --- Delete given versions of a program. | 62 | --- Delete given versions of a program. |
63 | -- @param name string: the name of a program | 63 | -- @param name string: the name of a program |
64 | -- @param versions array of string: the versions to be deleted. | 64 | -- @param versions array of string: the versions to be deleted. |
65 | -- @param deps_mode: string: Which trees to check dependencies for: | ||
66 | -- "one" for the current default tree, "all" for all trees, | ||
67 | -- "order" for all trees with priority >= the current default, "none" for no trees. | ||
65 | -- @return boolean or (nil, string): true on success or nil and an error message. | 68 | -- @return boolean or (nil, string): true on success or nil and an error message. |
66 | local function delete_versions(name, versions) | 69 | local function delete_versions(name, versions, deps_mode) |
67 | 70 | ||
68 | for version, _ in pairs(versions) do | 71 | for version, _ in pairs(versions) do |
69 | util.printout("Removing "..name.." "..version.."...") | 72 | util.printout("Removing "..name.." "..version.."...") |
70 | local ok, err = repos.delete_version(name, version) | 73 | local ok, err = repos.delete_version(name, version, deps_mode) |
71 | if not ok then return nil, err end | 74 | if not ok then return nil, err end |
72 | end | 75 | end |
73 | 76 | ||
@@ -112,9 +115,7 @@ function remove.remove_search_results(results, name, deps_mode, force, fast) | |||
112 | end | 115 | end |
113 | end | 116 | end |
114 | 117 | ||
115 | local ok, err = delete_versions(name, versions) | 118 | local ok, err = delete_versions(name, versions, deps_mode) |
116 | if not ok then return nil, err end | ||
117 | ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode) | ||
118 | if not ok then return nil, err end | 119 | if not ok then return nil, err end |
119 | 120 | ||
120 | util.printout("Removal successful.") | 121 | util.printout("Removal successful.") |
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua index 86126a13..4e8a9a13 100644 --- a/src/luarocks/repos.lua +++ b/src/luarocks/repos.lua | |||
@@ -267,13 +267,17 @@ end | |||
267 | -- Version numbers are compared as exact string comparison. | 267 | -- Version numbers are compared as exact string comparison. |
268 | -- @param name string: name of package | 268 | -- @param name string: name of package |
269 | -- @param version string: package version in string format | 269 | -- @param version string: package version in string format |
270 | -- @param deps_mode: string: Which trees to check dependencies for: | ||
271 | -- "one" for the current default tree, "all" for all trees, | ||
272 | -- "order" for all trees with priority >= the current default, "none" for no trees. | ||
270 | -- @param quick boolean: do not try to fix the versioned name | 273 | -- @param quick boolean: do not try to fix the versioned name |
271 | -- of another version that provides the same module that | 274 | -- of another version that provides the same module that |
272 | -- was deleted. This is used during 'purge', as every module | 275 | -- was deleted. This is used during 'purge', as every module |
273 | -- will be eventually deleted. | 276 | -- will be eventually deleted. |
274 | function repos.delete_version(name, version, quick) | 277 | function repos.delete_version(name, version, deps_mode, quick) |
275 | assert(type(name) == "string") | 278 | assert(type(name) == "string") |
276 | assert(type(version) == "string") | 279 | assert(type(version) == "string") |
280 | assert(type(deps_mode) == "string") | ||
277 | 281 | ||
278 | local function delete_deployed_file_tree(file_tree, deploy_dir, suffix) | 282 | local function delete_deployed_file_tree(file_tree, deploy_dir, suffix) |
279 | return recurse_rock_manifest_tree(file_tree, | 283 | return recurse_rock_manifest_tree(file_tree, |
@@ -323,7 +327,12 @@ function repos.delete_version(name, version, quick) | |||
323 | if not get_installed_versions(name) then | 327 | if not get_installed_versions(name) then |
324 | fs.delete(dir.path(cfg.rocks_dir, name)) | 328 | fs.delete(dir.path(cfg.rocks_dir, name)) |
325 | end | 329 | end |
326 | return true | 330 | |
331 | if quick then | ||
332 | return true | ||
333 | end | ||
334 | |||
335 | return manif.make_manifest(cfg.rocks_dir, deps_mode) | ||
327 | end | 336 | end |
328 | 337 | ||
329 | return repos | 338 | return repos |