Moved kegs from ARGV to args.rb
This commit is contained in:
parent
2bf8015bc4
commit
fd429d0d75
@ -50,6 +50,69 @@ module Homebrew
|
|||||||
def passthrough
|
def passthrough
|
||||||
options_only - CLI::Parser.global_options.values.map(&:first).flatten
|
options_only - CLI::Parser.global_options.values.map(&:first).flatten
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -38,7 +38,7 @@ module Homebrew
|
|||||||
mode.overwrite = true if args.overwrite?
|
mode.overwrite = true if args.overwrite?
|
||||||
mode.dry_run = true if args.dry_run?
|
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)
|
keg_only = Formulary.keg_only?(keg.rack)
|
||||||
|
|
||||||
if keg.linked?
|
if keg.linked?
|
||||||
|
|||||||
@ -73,9 +73,9 @@ module Homebrew
|
|||||||
safe_system "ls", *Homebrew.args.passthrough << HOMEBREW_CELLAR
|
safe_system "ls", *Homebrew.args.passthrough << HOMEBREW_CELLAR
|
||||||
end
|
end
|
||||||
elsif args.verbose? || !$stdout.tty?
|
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
|
else
|
||||||
ARGV.kegs.each { |keg| PrettyListing.new keg }
|
Homebrew.args.kegs.each { |keg| PrettyListing.new keg }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ module Homebrew
|
|||||||
[rack, rack.subdirs.map { |d| Keg.new(d) }]
|
[rack, rack.subdirs.map { |d| Keg.new(d) }]
|
||||||
end]
|
end]
|
||||||
else
|
else
|
||||||
ARGV.kegs.group_by(&:rack)
|
Homebrew.args.kegs.group_by(&:rack)
|
||||||
end
|
end
|
||||||
|
|
||||||
handle_unsatisfied_dependents(kegs_by_rack)
|
handle_unsatisfied_dependents(kegs_by_rack)
|
||||||
|
|||||||
@ -31,7 +31,7 @@ module Homebrew
|
|||||||
mode = OpenStruct.new
|
mode = OpenStruct.new
|
||||||
mode.dry_run = true if args.dry_run?
|
mode.dry_run = true if args.dry_run?
|
||||||
|
|
||||||
ARGV.kegs.each do |keg|
|
Homebrew.args.kegs.each do |keg|
|
||||||
if mode.dry_run
|
if mode.dry_run
|
||||||
puts "Would remove:"
|
puts "Would remove:"
|
||||||
keg.unlink(mode)
|
keg.unlink(mode)
|
||||||
|
|||||||
@ -33,10 +33,10 @@ module Homebrew
|
|||||||
linkage_args.parse
|
linkage_args.parse
|
||||||
|
|
||||||
CacheStoreDatabase.use(:linkage) do |db|
|
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?)
|
Formula.installed.map(&:opt_or_installed_prefix_keg).reject(&:nil?)
|
||||||
else
|
else
|
||||||
ARGV.kegs
|
Homebrew.args.kegs
|
||||||
end
|
end
|
||||||
kegs.each do |keg|
|
kegs.each do |keg|
|
||||||
ohai "Checking #{keg.name} linkage" if kegs.size > 1
|
ohai "Checking #{keg.name} linkage" if kegs.size > 1
|
||||||
|
|||||||
@ -39,58 +39,6 @@ module HomebrewArgvExtension
|
|||||||
downcased_unique_named.grep HOMEBREW_CASK_TAP_CASK_REGEX
|
downcased_unique_named.grep HOMEBREW_CASK_TAP_CASK_REGEX
|
||||||
end
|
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)
|
def value(name)
|
||||||
arg_prefix = "--#{name}="
|
arg_prefix = "--#{name}="
|
||||||
flag_with_value = find { |arg| arg.start_with?(arg_prefix) }
|
flag_with_value = find { |arg| arg.start_with?(arg_prefix) }
|
||||||
|
|||||||
@ -27,27 +27,6 @@ describe HomebrewArgvExtension do
|
|||||||
end
|
end
|
||||||
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
|
describe "#named" do
|
||||||
let(:argv) { ["foo", "--debug", "-v"] }
|
let(:argv) { ["foo", "--debug", "-v"] }
|
||||||
|
|
||||||
|
|||||||
@ -235,5 +235,22 @@ describe Homebrew::CLI::Parser do
|
|||||||
parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
|
parser.parse(["--foo", "--bar=value", "-v", "-s", "a", "b", "cdefg"])
|
||||||
expect(Homebrew.args.passthrough).to eq %w[--foo --bar=value -s]
|
expect(Homebrew.args.passthrough).to eq %w[--foo --bar=value -s]
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user