Moved kegs from ARGV to args.rb
This commit is contained in:
parent
2bf8015bc4
commit
fd429d0d75
@ -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
|
||||
|
||||
@ -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?
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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) }
|
||||
|
||||
@ -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"] }
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user