aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
Diffstat (limited to 'Library')
-rwxr-xr-xLibrary/brew.rb129
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