diff options
Diffstat (limited to 'Library/brew.rb')
| -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..1ade4c30b --- /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/cmds" + if 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 + elsif require? HOMEBREW_REPOSITORY/"Library/Homebrew/cmd"/cmd + Homebrew.send cmd.to_s.gsub('-', '_').downcase + 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 |
