Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Moved kegs from ARGV to args.rb #6622

Merged
merged 1 commit into from Nov 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
63 changes: 63 additions & 0 deletions Library/Homebrew/cli/args.rb
Expand Up @@ -50,6 +50,69 @@ def flags_only
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
2 changes: 1 addition & 1 deletion Library/Homebrew/cmd/link.rb
Expand Up @@ -38,7 +38,7 @@ def link
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?
Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/cmd/list.rb
Expand Up @@ -73,9 +73,9 @@ def list
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

Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/cmd/uninstall.rb
Expand Up @@ -38,7 +38,7 @@ def uninstall
[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)
Expand Down
2 changes: 1 addition & 1 deletion Library/Homebrew/cmd/unlink.rb
Expand Up @@ -31,7 +31,7 @@ def unlink
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)
Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/dev-cmd/linkage.rb
Expand Up @@ -33,10 +33,10 @@ def linkage
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
Expand Down
52 changes: 0 additions & 52 deletions Library/Homebrew/extend/ARGV.rb
Expand Up @@ -39,58 +39,6 @@ def casks
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) }
Expand Down
21 changes: 0 additions & 21 deletions Library/Homebrew/test/ARGV_spec.rb
Expand Up @@ -27,27 +27,6 @@
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"] }

Expand Down
17 changes: 17 additions & 0 deletions Library/Homebrew/test/cli/parser_spec.rb
Expand Up @@ -235,5 +235,22 @@
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