mirror of
https://github.com/gosticks/brew.git
synced 2026-09-03 15:30:28 +00:00
Refactor command handling code
Don’t rely on having external commands always present in the PATH in order to find them. Instead, provide an accessory method to Tap so they can be added and used when needed. While we’re here, do some general refactoring and cleanup of the command code in these places.
This commit is contained in:
@@ -8,15 +8,16 @@ module Homebrew
|
||||
|
||||
def command
|
||||
abort "This command requires a command argument" if ARGV.empty?
|
||||
cmd = ARGV.first
|
||||
cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(cmd, cmd)
|
||||
|
||||
if (path = Commands.path(cmd))
|
||||
puts path
|
||||
elsif (path = which("brew-#{cmd}") || which("brew-#{cmd}.rb"))
|
||||
puts path
|
||||
else
|
||||
odie "Unknown command: #{cmd}"
|
||||
end
|
||||
cmd = HOMEBREW_INTERNAL_COMMAND_ALIASES.fetch(ARGV.first, ARGV.first)
|
||||
|
||||
path = Commands.path(cmd)
|
||||
|
||||
cmd_paths = PATH.new(ENV["PATH"]).append(Tap.cmd_directories) unless path
|
||||
path ||= which("brew-#{cmd}", cmd_paths)
|
||||
path ||= which("brew-#{cmd}.rb", cmd_paths)
|
||||
|
||||
odie "Unknown command: #{cmd}" unless path
|
||||
puts path
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,27 +9,30 @@ module Homebrew
|
||||
|
||||
def commands
|
||||
if ARGV.include? "--quiet"
|
||||
cmds = internal_commands + external_commands
|
||||
cmds = internal_commands
|
||||
cmds += external_commands
|
||||
cmds += internal_developer_commands
|
||||
cmds += HOMEBREW_INTERNAL_COMMAND_ALIASES.keys if ARGV.include? "--include-aliases"
|
||||
puts Formatter.columns(cmds.sort)
|
||||
else
|
||||
# Find commands in Homebrew/cmd
|
||||
puts "Built-in commands"
|
||||
puts Formatter.columns(internal_commands.sort)
|
||||
|
||||
# Find commands in Homebrew/dev-cmd
|
||||
puts
|
||||
puts "Built-in developer commands"
|
||||
puts Formatter.columns(internal_developer_commands.sort)
|
||||
|
||||
# Find commands in the path
|
||||
unless (exts = external_commands).empty?
|
||||
puts
|
||||
puts "External commands"
|
||||
puts Formatter.columns(exts)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
# Find commands in Homebrew/cmd
|
||||
puts "Built-in commands"
|
||||
puts Formatter.columns(internal_commands.sort)
|
||||
|
||||
# Find commands in Homebrew/dev-cmd
|
||||
puts
|
||||
puts "Built-in developer commands"
|
||||
puts Formatter.columns(internal_developer_commands.sort)
|
||||
|
||||
exts = external_commands
|
||||
return if exts.empty?
|
||||
|
||||
# Find commands in the PATH
|
||||
puts
|
||||
puts "External commands"
|
||||
puts Formatter.columns(exts)
|
||||
end
|
||||
|
||||
def internal_commands
|
||||
@@ -41,11 +44,13 @@ module Homebrew
|
||||
end
|
||||
|
||||
def external_commands
|
||||
paths.each_with_object([]) do |path, cmds|
|
||||
cmd_paths = PATH.new(ENV["PATH"]).append(Tap.cmd_directories)
|
||||
cmd_paths.each_with_object([]) do |path, cmds|
|
||||
Dir["#{path}/brew-*"].each do |file|
|
||||
next unless File.executable?(file)
|
||||
cmd = File.basename(file, ".rb")[5..-1]
|
||||
cmds << cmd unless cmd.include?(".")
|
||||
next if cmd.include?(".")
|
||||
cmds << cmd
|
||||
end
|
||||
end.sort
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user