Moved kegs from ARGV to args.rb

This commit is contained in:
Zach Auten 2019-10-20 21:00:05 -04:00
parent 2bf8015bc4
commit fd429d0d75
9 changed files with 87 additions and 80 deletions

View File

@ -50,6 +50,69 @@ module Homebrew
def passthrough
options_only - CLI::Parser.global_options.values.map(&:first).flatten
end
def downcased_unique_named
# Only lowercase names, not paths, bottle filenames or URLs
@downcased_unique_named ||= remaining.map do |arg|
if arg.include?("/") || arg.end_with?(".tar.gz") || File.exist?(arg)
arg
else
arg.downcase
end
end.uniq
end
def kegs
require "keg"
require "formula"
require "missing_formula"
@kegs ||= downcased_unique_named.map do |name|
raise UsageError if name.empty?
rack = Formulary.to_rack(name.downcase)
dirs = rack.directory? ? rack.subdirs : []
if dirs.empty?
if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall"))
$stderr.puts reason
end
raise NoSuchKegError, rack.basename
end
linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
begin
if opt_prefix.symlink? && opt_prefix.directory?
Keg.new(opt_prefix.resolved_path)
elsif linked_keg_ref.symlink? && linked_keg_ref.directory?
Keg.new(linked_keg_ref.resolved_path)
elsif dirs.length == 1
Keg.new(dirs.first)
else
f = if name.include?("/") || File.exist?(name)
Formulary.factory(name)
else
Formulary.from_rack(rack)
end
unless (prefix = f.installed_prefix).directory?
raise MultipleVersionsInstalledError, rack.basename
end
Keg.new(prefix)
end
rescue FormulaUnavailableError
raise <<~EOS
Multiple kegs installed to #{rack}
However we don't know which one you refer to.
Please delete (with rm -rf!) all but one and then try again.
EOS
end
end
end
end
end
end

View File

@ -38,7 +38,7 @@ module Homebrew
mode.overwrite = true if args.overwrite?
mode.dry_run = true if args.dry_run?
ARGV.kegs.each do |keg|
Homebrew.args.kegs.each do |keg|
keg_only = Formulary.keg_only?(keg.rack)
if keg.linked?

View File

@ -73,9 +73,9 @@ module Homebrew
safe_system "ls", *Homebrew.args.passthrough << HOMEBREW_CELLAR
end
elsif args.verbose? || !$stdout.tty?
system_command! "find", args: ARGV.kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true
system_command! "find", args: Homebrew.args.kegs.map(&:to_s) + %w[-not -type d -print], print_stdout: true
else
ARGV.kegs.each { |keg| PrettyListing.new keg }
Homebrew.args.kegs.each { |keg| PrettyListing.new keg }
end
end

View File

@ -38,7 +38,7 @@ module Homebrew
[rack, rack.subdirs.map { |d| Keg.new(d) }]
end]
else
ARGV.kegs.group_by(&:rack)
Homebrew.args.kegs.group_by(&:rack)
end
handle_unsatisfied_dependents(kegs_by_rack)

View File

@ -31,7 +31,7 @@ module Homebrew
mode = OpenStruct.new
mode.dry_run = true if args.dry_run?
ARGV.kegs.each do |keg|
Homebrew.args.kegs.each do |keg|
if mode.dry_run
puts "Would remove:"
keg.unlink(mode)

View File

@ -33,10 +33,10 @@ module Homebrew
linkage_args.parse
CacheStoreDatabase.use(:linkage) do |db|
kegs = if ARGV.kegs.empty?
kegs = if Homebrew.args.kegs.empty?
Formula.installed.map(&:opt_or_installed_prefix_keg).reject(&:nil?)
else
ARGV.kegs
Homebrew.args.kegs
end
kegs.each do |keg|
ohai "Checking #{keg.name} linkage" if kegs.size > 1

View File

@ -39,58 +39,6 @@ module HomebrewArgvExtension
downcased_unique_named.grep HOMEBREW_CASK_TAP_CASK_REGEX
end
def kegs
require "keg"
require "formula"
require "missing_formula"
# TODO: use @instance variable to ||= cache when moving to CLI::Parser
downcased_unique_named.map do |name|
raise UsageError if name.empty?
rack = Formulary.to_rack(name.downcase)
dirs = rack.directory? ? rack.subdirs : []
if dirs.empty?
if (reason = Homebrew::MissingFormula.suggest_command(name, "uninstall"))
$stderr.puts reason
end
raise NoSuchKegError, rack.basename
end
linked_keg_ref = HOMEBREW_LINKED_KEGS/rack.basename
opt_prefix = HOMEBREW_PREFIX/"opt/#{rack.basename}"
begin
if opt_prefix.symlink? && opt_prefix.directory?
Keg.new(opt_prefix.resolved_path)
elsif linked_keg_ref.symlink? && linked_keg_ref.directory?
Keg.new(linked_keg_ref.resolved_path)
elsif dirs.length == 1
Keg.new(dirs.first)
else
f = if name.include?("/") || File.exist?(name)
Formulary.factory(name)
else
Formulary.from_rack(rack)
end
unless (prefix = f.installed_prefix).directory?
raise MultipleVersionsInstalledError, rack.basename
end
Keg.new(prefix)
end
rescue FormulaUnavailableError
raise <<~EOS
Multiple kegs installed to #{rack}
However we don't know which one you refer to.
Please delete (with rm -rf!) all but one and then try again.
EOS
end
end
end
def value(name)
arg_prefix = "--#{name}="
flag_with_value = find { |arg| arg.start_with?(arg_prefix) }

View File

@ -27,27 +27,6 @@ describe HomebrewArgvExtension do
end
end
describe "#kegs" do
context "when there are matching Kegs" do
before do
keg = HOMEBREW_CELLAR + "mxcl/10.0"
keg.mkpath
end
it "returns an array of Kegs" do
expect(subject.kegs.length).to eq 1
end
end
context "when there are no matching Kegs" do
let(:argv) { [] }
it "returns an empty array" do
expect(subject.kegs).to be_empty
end
end
end
describe "#named" do
let(:argv) { ["foo", "--debug", "-v"] }

View File

@ -235,5 +235,22 @@ describe Homebrew::CLI::Parser do
parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
expect(Homebrew.args.passthrough).to eq %w[--foo --bar=value -s]
end
context "kegs" do
before do
keg = HOMEBREW_CELLAR + "mxcl/10.0"
keg.mkpath
end
it "when there are matching kegs returns an array of Kegs" do
parser.parse(["mxcl"])
expect(Homebrew.args.kegs.length).to eq 1
end
it "when there are no matching kegs returns an array of Kegs" do
parser.parse([])
expect(Homebrew.args.kegs).to be_empty
end
end
end
end