diff options
Diffstat (limited to 'Library')
| -rwxr-xr-x | Library/brew.rb | 129 | 
1 files changed, 129 insertions, 0 deletions
| diff --git a/Library/brew.rb b/Library/brew.rb new file mode 100755 index 000000000..ea46c9b07 --- /dev/null +++ b/Library/brew.rb @@ -0,0 +1,129 @@ +#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0 +# -*- coding: utf-8 -*- + +std_trap = trap("INT") { exit! 130 } # no backtrace thanks + +HOMEBREW_BREW_FILE = ENV['HOMEBREW_BREW_FILE'] = File.expand_path(__FILE__) + +if ARGV == %w{--prefix} +  puts File.dirname(File.dirname(HOMEBREW_BREW_FILE)) +  exit 0 +end + +require 'pathname' +HOMEBREW_LIBRARY_PATH = Pathname.new(__FILE__).realpath.dirname.parent.join("Library/Homebrew").to_s +$:.unshift(HOMEBREW_LIBRARY_PATH + '/vendor') +$:.unshift(HOMEBREW_LIBRARY_PATH) +require 'global' + +case ARGV.first when '-h', '--help', '--usage', '-?', 'help', nil +  require 'cmd/help' +  puts Homebrew.help_s +  exit ARGV.first ? 0 : 1 +when '--version' +  puts HOMEBREW_VERSION +  exit 0 +when '-v' +  puts "Homebrew #{HOMEBREW_VERSION}" +  # Shift the -v to the end of the parameter list +  ARGV << ARGV.shift +  # If no other arguments, just quit here. +  exit 0 if ARGV.length == 1 +end + +case HOMEBREW_PREFIX.to_s when '/', '/usr' +  # it may work, but I only see pain this route and don't want to support it +  abort "Cowardly refusing to continue at this prefix: #{HOMEBREW_PREFIX}" +end +if MACOS and MACOS_VERSION < 10.5 +  abort <<-EOABORT.undent +    Homebrew requires Leopard or higher. For Tiger support, see: +    https://github.com/mistydemeo/tigerbrew +  EOABORT +end + +# Many Pathname operations use getwd when they shouldn't, and then throw +# odd exceptions. Reduce our support burden by showing a user-friendly error. +Dir.getwd rescue abort "The current working directory doesn't exist, cannot proceed." + + +def require? path +  require path.to_s.chomp +rescue LoadError => e +  # HACK :( because we should raise on syntax errors but +  # not if the file doesn't exist. TODO make robust! +  raise unless e.to_s.include? path +end + +begin +  trap("INT", std_trap) # restore default CTRL-C handler + +  aliases = {'ls' => :list, +             'homepage' => :home, +             '-S' => :search, +             'up' => :update, +             'ln' => :link, +             'instal' => :install, # gem does the same +             'rm' => :uninstall, +             'remove' => :uninstall, +             'configure' => :diy, +             'abv' => :info, +             'dr' => :doctor, +             '--repo' => '--repository', +             'environment' => '--env'  # same as gem +             } + +  cmd = ARGV.shift +  cmd = aliases[cmd] if aliases[cmd] + +  if cmd == '-c1' +    cmd = '--config' +    ARGV.unshift('-1') +  end + +  # Add example external commands to PATH before checking. +  ENV['PATH'] += ":#{HOMEBREW_REPOSITORY}/Library/Contributions/cmd" +  if require? HOMEBREW_REPOSITORY/"Library/Homebrew/cmd"/cmd +    Homebrew.send cmd.to_s.gsub('-', '_').downcase +  elsif which "brew-#{cmd}" +    %w[CACHE CELLAR LIBRARY_PATH PREFIX REPOSITORY].each do |e| +      ENV["HOMEBREW_#{e}"] = Object.const_get "HOMEBREW_#{e}" +    end +    exec "brew-#{cmd}", *ARGV +  elsif require? `/usr/bin/which brew-#{cmd}.rb` +    exit 0 +  else +    onoe "Unknown command: #{cmd}" +    exit 1 +  end + +rescue FormulaUnspecifiedError +  abort "This command requires a formula argument" +rescue KegUnspecifiedError +  abort "This command requires a keg argument" +rescue UsageError +  onoe "Invalid usage" +  abort ARGV.usage +rescue SystemExit +  puts "Kernel.exit" if ARGV.verbose? +  raise +rescue Interrupt => e +  puts # seemingly a newline is typical +  exit 130 +rescue BuildError => e +  e.dump +  exit 1 +rescue RuntimeError, SystemCallError => e +  raise if e.message.empty? +  onoe e +  puts e.backtrace if ARGV.debug? +  exit 1 +rescue Exception => e +  onoe e +  puts "#{Tty.white}Please report this bug:" +  puts "    #{Tty.em}#{ISSUES_URL}#{Tty.reset}" +  puts e.backtrace +  exit 1 +else +  exit 1 if Homebrew.failed? +end | 
