Pass args in uninstall instead of using global args.

This commit is contained in:
Markus Reiter 2020-07-26 09:45:26 +02:00
parent b3eca532fc
commit e14506e589
2 changed files with 19 additions and 20 deletions

View File

@ -30,7 +30,7 @@ module Homebrew
end end
def uninstall def uninstall
uninstall_args.parse args = uninstall_args.parse
if args.force? if args.force?
casks = [] casks = []
@ -54,7 +54,9 @@ module Homebrew
kegs_by_rack = all_kegs.group_by(&:rack) kegs_by_rack = all_kegs.group_by(&:rack)
end 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? return if Homebrew.failed?
kegs_by_rack.each do |rack, kegs| kegs_by_rack.each do |rack, kegs|
@ -142,40 +144,41 @@ module Homebrew
end end
end end
def handle_unsatisfied_dependents(kegs_by_rack) def handle_unsatisfied_dependents(kegs_by_rack, ignore_dependencies: false, named_args: [])
return if args.ignore_dependencies? return if ignore_dependencies
all_kegs = kegs_by_rack.values.flatten(1) all_kegs = kegs_by_rack.values.flatten(1)
check_for_dependents all_kegs check_for_dependents(all_kegs, named_args: named_args)
rescue MethodDeprecatedError rescue MethodDeprecatedError
# Silently ignore deprecations when uninstalling. # Silently ignore deprecations when uninstalling.
nil nil
end end
def check_for_dependents(kegs) def check_for_dependents(kegs, named_args: [])
return false unless result = Keg.find_some_installed_dependents(kegs) return false unless result = Keg.find_some_installed_dependents(kegs)
if Homebrew::EnvConfig.developer? if Homebrew::EnvConfig.developer?
DeveloperDependentsMessage.new(*result).output DeveloperDependentsMessage.new(*result, named_args: named_args).output
else else
NondeveloperDependentsMessage.new(*result).output NondeveloperDependentsMessage.new(*result, named_args: named_args).output
end end
true true
end end
class DependentsMessage class DependentsMessage
attr_reader :reqs, :deps attr_reader :reqs, :deps, :named_args
def initialize(requireds, dependents) def initialize(requireds, dependents, named_args: [])
@reqs = requireds @reqs = requireds
@deps = dependents @deps = dependents
@named_args = named_args
end end
protected protected
def sample_command def sample_command
"brew uninstall --ignore-dependencies #{Array(Homebrew.args.named).join(" ")}" "brew uninstall --ignore-dependencies #{named_args.join(" ")}"
end end
def are_required_by_deps def are_required_by_deps

View File

@ -28,7 +28,7 @@ describe Homebrew do
end end
end end
let(:opts) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } } let(:kegs_by_rack) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } }
before do before do
[dependency, dependent].each do |f| [dependency, dependent].each do |f|
@ -53,7 +53,7 @@ describe Homebrew do
ENV["HOMEBREW_DEVELOPER"] = "1" ENV["HOMEBREW_DEVELOPER"] = "1"
expect { expect {
described_class.handle_unsatisfied_dependents(opts) described_class.handle_unsatisfied_dependents(kegs_by_rack)
}.to output(/Warning/).to_stderr }.to output(/Warning/).to_stderr
expect(described_class).not_to have_failed expect(described_class).not_to have_failed
@ -61,19 +61,15 @@ describe Homebrew do
specify "when not developer" do specify "when not developer" do
expect { expect {
described_class.handle_unsatisfied_dependents(opts) described_class.handle_unsatisfied_dependents(kegs_by_rack)
}.to output(/Error/).to_stderr }.to output(/Error/).to_stderr
expect(described_class).to have_failed expect(described_class).to have_failed
end end
specify "when not developer and --ignore-dependencies is specified" do specify "when not developer and `ignore_dependencies` is true" 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
expect { expect {
described_class.handle_unsatisfied_dependents(opts) described_class.handle_unsatisfied_dependents(kegs_by_rack, ignore_dependencies: true)
}.not_to output.to_stderr }.not_to output.to_stderr
expect(described_class).not_to have_failed expect(described_class).not_to have_failed