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
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

View File

@ -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