From 268efd3f76ebb4a0c0ff155bdb33b76d807a0784 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Thu, 5 Sep 2013 15:20:34 -0300 Subject: Add --force=fast mode that does not report on dependency issues, as suggested by @agladysh. Closes #144. --- src/luarocks/remove.lua | 56 +++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 25 deletions(-) (limited to 'src') 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") local fs = require("luarocks.fs") help_summary = "Uninstall a rock." -help_arguments = "[--force] []" +help_arguments = "[--force[=fast]] []" help = [[ Argument is the name of a rock to be uninstalled. If a version is not given, try to remove all versions at once. Will only perform the removal if it does not break dependencies. To override this check and force the removal, use --force. +To perform a forced removal without reporting dependency issues, +use --force=fast. ]] --- 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) local version = next(versions) local second = next(versions, version) - util.printout("Checking stability of dependencies on the absence of") - util.printout(name.." "..table.concat(util.keys(versions), ", ").."...") - util.printout() - - local dependents = check_dependents(name, versions, deps_mode) + local dependents = {} + if force ~= "fast" then + util.printout("Checking stability of dependencies on the absence of") + util.printout(name.." "..table.concat(util.keys(versions), ", ").."...") + util.printout() + dependents = check_dependents(name, versions, deps_mode) + end - if #dependents == 0 or force then - if #dependents > 0 then + if #dependents > 0 then + if force then util.printerr("The following packages may be broken by this forced removal:") for _, dependent in ipairs(dependents) do util.printerr(dependent.name.." "..dependent.version) end util.printerr() - end - local ok, err = delete_versions(name, versions) - if not ok then return nil, err end - ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode) - if not ok then return nil, err end - else - if not second then - util.printerr("Will not remove "..name.." "..version..".") - util.printerr("Removing it would break dependencies for: ") else - util.printerr("Will not remove installed versions of "..name..".") - util.printerr("Removing them would break dependencies for: ") - end - for _, dependent in ipairs(dependents) do - util.printerr(dependent.name.." "..dependent.version) + if not second then + util.printerr("Will not remove "..name.." "..version..".") + util.printerr("Removing it would break dependencies for: ") + else + util.printerr("Will not remove installed versions of "..name..".") + util.printerr("Removing them would break dependencies for: ") + end + for _, dependent in ipairs(dependents) do + util.printerr(dependent.name.." "..dependent.version) + end + util.printerr() + util.printerr("Use --force to force removal (warning: this may break modules).") + return nil, "Failed removing." end - util.printerr() - util.printerr("Use --force to force removal (warning: this may break modules).") - return nil, "Failed removing." end + + local ok, err = delete_versions(name, versions) + if not ok then return nil, err end + ok, err = manif.make_manifest(cfg.rocks_dir, deps_mode) + if not ok then return nil, err end + util.printout("Removal successful.") return true end -- cgit v1.2.3-55-g6feb