aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/luarocks/remove.lua56
1 files changed, 31 insertions, 25 deletions
diff --git a/src/luarocks/remove.lua b/src/luarocks/remove.lua
index 96816419..5a6e4dc5 100644
--- a/src/luarocks/remove.lua
+++ b/src/luarocks/remove.lua
@@ -14,12 +14,14 @@ local manif = require("luarocks.manif")
14local fs = require("luarocks.fs") 14local fs = require("luarocks.fs")
15 15
16help_summary = "Uninstall a rock." 16help_summary = "Uninstall a rock."
17help_arguments = "[--force] <name> [<version>]" 17help_arguments = "[--force[=fast]] <name> [<version>]"
18help = [[ 18help = [[
19Argument is the name of a rock to be uninstalled. 19Argument is the name of a rock to be uninstalled.
20If a version is not given, try to remove all versions at once. 20If a version is not given, try to remove all versions at once.
21Will only perform the removal if it does not break dependencies. 21Will only perform the removal if it does not break dependencies.
22To override this check and force the removal, use --force. 22To override this check and force the removal, use --force.
23To perform a forced removal without reporting dependency issues,
24use --force=fast.
23]] 25]]
24 26
25--- Obtain a list of packages that depend on the given set of packages 27--- Obtain a list of packages that depend on the given set of packages
@@ -75,39 +77,43 @@ function remove_search_results(results, name, deps_mode, force)
75 local version = next(versions) 77 local version = next(versions)
76 local second = next(versions, version) 78 local second = next(versions, version)
77 79
78 util.printout("Checking stability of dependencies on the absence of") 80 local dependents = {}
79 util.printout(name.." "..table.concat(util.keys(versions), ", ").."...") 81 if force ~= "fast" then
80 util.printout() 82 util.printout("Checking stability of dependencies on the absence of")
81 83 util.printout(name.." "..table.concat(util.keys(versions), ", ").."...")
82 local dependents = check_dependents(name, versions, deps_mode) 84 util.printout()
85 dependents = check_dependents(name, versions, deps_mode)
86 end
83 87
84 if #dependents == 0 or force then 88 if #dependents > 0 then
85 if #dependents > 0 then 89 if force then
86 util.printerr("The following packages may be broken by this forced removal:") 90 util.printerr("The following packages may be broken by this forced removal:")
87 for _, dependent in ipairs(dependents) do 91 for _, dependent in ipairs(dependents) do
88 util.printerr(dependent.name.." "..dependent.version) 92 util.printerr(dependent.name.." "..dependent.version)
89 end 93 end
90 util.printerr() 94 util.printerr()
91 end
92 local ok, err = delete_versions(name, versions)
93 if not ok then return nil, err end
94 ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode)
95 if not ok then return nil, err end
96 else
97 if not second then
98 util.printerr("Will not remove "..name.." "..version..".")
99 util.printerr("Removing it would break dependencies for: ")
100 else 95 else
101 util.printerr("Will not remove installed versions of "..name..".") 96 if not second then
102 util.printerr("Removing them would break dependencies for: ") 97 util.printerr("Will not remove "..name.." "..version..".")
103 end 98 util.printerr("Removing it would break dependencies for: ")
104 for _, dependent in ipairs(dependents) do 99 else
105 util.printerr(dependent.name.." "..dependent.version) 100 util.printerr("Will not remove installed versions of "..name..".")
101 util.printerr("Removing them would break dependencies for: ")
102 end
103 for _, dependent in ipairs(dependents) do
104 util.printerr(dependent.name.." "..dependent.version)
105 end
106 util.printerr()
107 util.printerr("Use --force to force removal (warning: this may break modules).")
108 return nil, "Failed removing."
106 end 109 end
107 util.printerr()
108 util.printerr("Use --force to force removal (warning: this may break modules).")
109 return nil, "Failed removing."
110 end 110 end
111
112 local ok, err = delete_versions(name, versions)
113 if not ok then return nil, err end
114 ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode)
115 if not ok then return nil, err end
116
111 util.printout("Removal successful.") 117 util.printout("Removal successful.")
112 return true 118 return true
113end 119end