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 /src | |
| 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.
Diffstat (limited to 'src')
| -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 |
