aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHisham <hisham@gobolinux.org>2016-10-18 18:06:10 -0400
committerHisham <hisham@gobolinux.org>2016-10-18 18:06:10 -0400
commitf83a936687d33b9b5ec9211d8b5534650b471385 (patch)
tree24fe6be0ed24c7b51bf77de1b1f0036f0eb4988d
parent2f67a04c91c5088d78d5f18013dded4f89382ff3 (diff)
downloadluarocks-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.lua4
-rw-r--r--src/luarocks/install.lua6
-rw-r--r--src/luarocks/manif.lua2
-rw-r--r--src/luarocks/purge.lua2
-rw-r--r--src/luarocks/remove.lua11
-rw-r--r--src/luarocks/repos.lua13
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.
371function manif.make_manifest(repo, deps_mode, remote) 371function 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.
66local function delete_versions(name, versions) 69local 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.
274function repos.delete_version(name, version, quick) 277function 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)
327end 336end
328 337
329return repos 338return repos