diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index 64b59a65d4..bc1703acd3 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -30,7 +30,7 @@ module Homebrew end def uninstall - uninstall_args.parse + args = uninstall_args.parse if args.force? casks = [] @@ -54,7 +54,9 @@ module Homebrew kegs_by_rack = all_kegs.group_by(&:rack) end - handle_unsatisfied_dependents(kegs_by_rack) + handle_unsatisfied_dependents(kegs_by_rack, + ignore_dependencies: args.ignore_dependencies?, + named_args: args.named) return if Homebrew.failed? kegs_by_rack.each do |rack, kegs| @@ -142,40 +144,41 @@ module Homebrew end end - def handle_unsatisfied_dependents(kegs_by_rack) - return if args.ignore_dependencies? + def handle_unsatisfied_dependents(kegs_by_rack, ignore_dependencies: false, named_args: []) + return if ignore_dependencies all_kegs = kegs_by_rack.values.flatten(1) - check_for_dependents all_kegs + check_for_dependents(all_kegs, named_args: named_args) rescue MethodDeprecatedError # Silently ignore deprecations when uninstalling. nil end - def check_for_dependents(kegs) + def check_for_dependents(kegs, named_args: []) return false unless result = Keg.find_some_installed_dependents(kegs) if Homebrew::EnvConfig.developer? - DeveloperDependentsMessage.new(*result).output + DeveloperDependentsMessage.new(*result, named_args: named_args).output else - NondeveloperDependentsMessage.new(*result).output + NondeveloperDependentsMessage.new(*result, named_args: named_args).output end true end class DependentsMessage - attr_reader :reqs, :deps + attr_reader :reqs, :deps, :named_args - def initialize(requireds, dependents) + def initialize(requireds, dependents, named_args: []) @reqs = requireds @deps = dependents + @named_args = named_args end protected def sample_command - "brew uninstall --ignore-dependencies #{Array(Homebrew.args.named).join(" ")}" + "brew uninstall --ignore-dependencies #{named_args.join(" ")}" end def are_required_by_deps diff --git a/Library/Homebrew/test/cmd/uninstall_spec.rb b/Library/Homebrew/test/cmd/uninstall_spec.rb index 696be790e3..f27ff096bf 100644 --- a/Library/Homebrew/test/cmd/uninstall_spec.rb +++ b/Library/Homebrew/test/cmd/uninstall_spec.rb @@ -28,7 +28,7 @@ describe Homebrew do end end - let(:opts) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } } + let(:kegs_by_rack) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } } before do [dependency, dependent].each do |f| @@ -53,7 +53,7 @@ describe Homebrew do ENV["HOMEBREW_DEVELOPER"] = "1" expect { - described_class.handle_unsatisfied_dependents(opts) + described_class.handle_unsatisfied_dependents(kegs_by_rack) }.to output(/Warning/).to_stderr expect(described_class).not_to have_failed @@ -61,19 +61,15 @@ describe Homebrew do specify "when not developer" do expect { - described_class.handle_unsatisfied_dependents(opts) + described_class.handle_unsatisfied_dependents(kegs_by_rack) }.to output(/Error/).to_stderr expect(described_class).to have_failed end - specify "when not developer and --ignore-dependencies is specified" do - described_class.args = described_class.args.dup if described_class.args.frozen? - expect(described_class.args).to receive(:ignore_dependencies?).and_return(true) - described_class.args.freeze - + specify "when not developer and `ignore_dependencies` is true" do expect { - described_class.handle_unsatisfied_dependents(opts) + described_class.handle_unsatisfied_dependents(kegs_by_rack, ignore_dependencies: true) }.not_to output.to_stderr expect(described_class).not_to have_failed