diff options
-rw-r--r-- | src/luarocks/remove.lua | 56 |
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") | |||
14 | local fs = require("luarocks.fs") | 14 | local fs = require("luarocks.fs") |
15 | 15 | ||
16 | help_summary = "Uninstall a rock." | 16 | help_summary = "Uninstall a rock." |
17 | help_arguments = "[--force] <name> [<version>]" | 17 | help_arguments = "[--force[=fast]] <name> [<version>]" |
18 | help = [[ | 18 | help = [[ |
19 | Argument is the name of a rock to be uninstalled. | 19 | Argument is the name of a rock to be uninstalled. |
20 | If a version is not given, try to remove all versions at once. | 20 | If a version is not given, try to remove all versions at once. |
21 | Will only perform the removal if it does not break dependencies. | 21 | Will only perform the removal if it does not break dependencies. |
22 | To override this check and force the removal, use --force. | 22 | To override this check and force the removal, use --force. |
23 | To perform a forced removal without reporting dependency issues, | ||
24 | use --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 |
113 | end | 119 | end |