diff --git a/Library/Contributions/cmds/git b/Library/Contributions/cmds/git new file mode 100755 index 0000000000..7539ecfc01 --- /dev/null +++ b/Library/Contributions/cmds/git @@ -0,0 +1,51 @@ +#!/usr/bin/ruby -W0 +# This script because we support $GIT, $HOMEBREW_SVN, etc. and Xcode-only +# configurations. Order is careful to be what the user would want. + +F = File.basename(__FILE__).freeze +D = File.expand_path(File.dirname(__FILE__)).freeze + +def exec *args + # prevent fork-bombs + arg0 = if args.size == 1 + args.first.split(' ') + else + args + end.first + return if arg0 =~ /^#{F}/i + return if File.expand_path(arg0) == File.expand_path(__FILE__) + + if args[1] == '-print-path' and File.executable? args[0] + puts args[0] + exit 0 + else + Kernel.exec *args + end +end + +case F.downcase + when 'git' then %W{HOMEBREW_GIT GIT} + when 'svn' then "HOMEBREW_SVN" + else [] +end.each do |key| + exec ENV[key], *ARGV if ENV[key] and File.executable? ENV[key] +end + +brew_version = File.expand_path("#{D}/../../../bin/#{F}") +exec brew_version, *ARGV if File.executable? brew_version + +`/usr/bin/which -a #{F} 2>/dev/null`.split("\n").each do |path| + exec path, *ARGV +end + +# xcrun hangs if xcode-select is set to "/" +path = `/usr/bin/xcode-select -print-path 2>/dev/null`.chomp +if path != "/" + path = `/usr/bin/xcrun -find #{F} 2>/dev/null`.chomp + exec path, *ARGV if File.executable? path +end + +path = "/Applications/Xcode.app/Contents/Developer/usr/bin/#{F}" +exec path, *ARGV if File.executable? path + +abort "You must: brew install #{F}" diff --git a/Library/Contributions/cmds/svn b/Library/Contributions/cmds/svn new file mode 120000 index 0000000000..0899c2993d --- /dev/null +++ b/Library/Contributions/cmds/svn @@ -0,0 +1 @@ +git \ No newline at end of file diff --git a/Library/Homebrew/cmd/--env.rb b/Library/Homebrew/cmd/--env.rb index df458fc87a..f45386d0cc 100644 --- a/Library/Homebrew/cmd/--env.rb +++ b/Library/Homebrew/cmd/--env.rb @@ -23,7 +23,7 @@ module Homebrew extend self CMAKE_PREFIX_PATH CMAKE_INCLUDE_PATH CMAKE_FRAMEWORK_PATH MAKEFLAGS MACOSX_DEPLOYMENT_TARGET PKG_CONFIG_PATH HOMEBREW_BUILD_FROM_SOURCE HOMEBREW_DEBUG HOMEBREW_MAKE_JOBS HOMEBREW_VERBOSE HOMEBREW_USE_CLANG - HOMEBREW_USE_GCC HOMEBREW_USE_LLVM HOMEBREW_SVN + HOMEBREW_USE_GCC HOMEBREW_USE_LLVM HOMEBREW_SVN HOMEBREW_GIT MAKE GIT CPP ACLOCAL_PATH OBJC PATH ].select{ |key| env[key] } end diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index bd7512a36c..68a91d0a48 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -210,7 +210,7 @@ end class SubversionDownloadStrategy < AbstractDownloadStrategy def initialize name, package super - @@svn ||= find_svn + @@svn ||= 'svn' @unique_token="#{name}--svn" unless name.to_s.empty? or name == '__UNKNOWN__' @unique_token += "-HEAD" if ARGV.include? '--HEAD' @co=HOMEBREW_CACHE+@unique_token @@ -269,20 +269,12 @@ class SubversionDownloadStrategy < AbstractDownloadStrategy args << '--ignore-externals' if ignore_externals quiet_safe_system(*args) end - - # Try HOMEBREW_SVN, a Homebrew-built svn, and finally the OS X system svn. - # Not all features are available in the 10.5 system-provided svn. - def find_svn - return ENV['HOMEBREW_SVN'] if ENV['HOMEBREW_SVN'] - return "#{HOMEBREW_PREFIX}/bin/svn" if File.exist? "#{HOMEBREW_PREFIX}/bin/svn" - return MacOS.locate 'svn' - end end # Require a newer version of Subversion than 1.4.x (Leopard-provided version) class StrictSubversionDownloadStrategy < SubversionDownloadStrategy def find_svn - exe = super + exe = `svn -print-path` `#{exe} --version` =~ /version (\d+\.\d+(\.\d+)*)/ svn_version = $1 version_tuple=svn_version.split(".").collect {|v|Integer(v)} @@ -316,7 +308,7 @@ end class GitDownloadStrategy < AbstractDownloadStrategy def initialize name, package super - @@git ||= find_git + @@git ||= 'git' @unique_token="#{name}--git" unless name.to_s.empty? or name == '__UNKNOWN__' @clone=HOMEBREW_CACHE+@unique_token end @@ -334,7 +326,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy end def fetch - raise "You must install Git: brew install git" unless which "git" + raise "You must: brew install git" unless which "git" ohai "Cloning #{@url}" @@ -405,13 +397,6 @@ class GitDownloadStrategy < AbstractDownloadStrategy end end end - - # Try GIT, a Homebrew-built Git, and finally the OS X system Git. - def find_git - return ENV['GIT'] if ENV['GIT'] - return "#{HOMEBREW_PREFIX}/bin/git" if File.exist? "#{HOMEBREW_PREFIX}/bin/git" - return MacOS.locate 'git' - end end class CVSDownloadStrategy < AbstractDownloadStrategy