diff --git a/Library/Homebrew/cmd/uninstall.rb b/Library/Homebrew/cmd/uninstall.rb index 0476f34329..8de4b4f0d5 100644 --- a/Library/Homebrew/cmd/uninstall.rb +++ b/Library/Homebrew/cmd/uninstall.rb @@ -11,14 +11,33 @@ require "keg" require "formula" require "diagnostic" require "migrator" +require "cli_parser" module Homebrew module_function - def uninstall - raise KegUnspecifiedError if ARGV.named.empty? + def uninstall_args + Homebrew::CLI::Parser.new do + usage_banner <<~EOS + `uninstall`, `rm`, `remove` [] - kegs_by_rack = if ARGV.force? + Uninstall . + EOS + switch :force, + description: "Delete all installed versions of the " + switch "--ignore-dependencies", + description: "Dont fail uninstall, even if is a dependency of any installed "\ + "formulae." + switch :debug + end + end + + def uninstall + uninstall_args.parse + + raise KegUnspecifiedError if args.remaining.empty? + + kegs_by_rack = if args.force? Hash[ARGV.named.map do |name| rack = Formulary.to_rack(name) next unless rack.directory? @@ -33,7 +52,7 @@ module Homebrew return if Homebrew.failed? kegs_by_rack.each do |rack, kegs| - if ARGV.force? + if args.force? name = rack.basename if rack.directory? @@ -87,7 +106,7 @@ module Homebrew end def handle_unsatisfied_dependents(kegs_by_rack) - return if ARGV.include?("--ignore-dependencies") + return if args.ignore_dependencies? all_kegs = kegs_by_rack.values.flatten(1) check_for_dependents all_kegs diff --git a/Library/Homebrew/test/cmd/uninstall_spec.rb b/Library/Homebrew/test/cmd/uninstall_spec.rb index 95b51e8202..3af338050d 100644 --- a/Library/Homebrew/test/cmd/uninstall_spec.rb +++ b/Library/Homebrew/test/cmd/uninstall_spec.rb @@ -60,7 +60,7 @@ describe Homebrew do end specify "when not developer and --ignore-dependencies is specified" do - ARGV << "--ignore-dependencies" + expect(described_class.args).to receive(:ignore_dependencies?).and_return(true) expect { described_class.handle_unsatisfied_dependents(opts)