diff --git a/Library/Contributions/manpages/brew.1.md b/Library/Contributions/manpages/brew.1.md index 5cb4e1805ce43721e837fafc05c32df2e0876723..f87c8a96c837bd0bd72d80abfc84a1327fdb3173 100644 --- a/Library/Contributions/manpages/brew.1.md +++ b/Library/Contributions/manpages/brew.1.md @@ -369,6 +369,15 @@ can take several different forms: ## ENVIRONMENT + * GIT: + When using Git, Homebrew will use `GIT` if set, + a Homebrew-built Git if installed, or the system-provided binary. + + Set this to force Homebrew to use a particular git binary. + + * EDITOR: + If set, and `HOMEBREW_EDITOR` is not, use `EDITOR` as the text editor. + * HOMEBREW\_BUILD\_FROM\_SOURCE: If set, instructs Homebrew to compile from source even when a formula provides a bottle. diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index d5da87b9310dac505a68adb326c44ec573c990cb..73aeeda5708c6b6b95b19a281c63910f11491116 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -315,6 +315,7 @@ end class GitDownloadStrategy < AbstractDownloadStrategy def initialize name, package super + @@git ||= find_git @unique_token="#{name}--git" unless name.to_s.empty? or name == '__UNKNOWN__' @clone=HOMEBREW_CACHE+@unique_token end @@ -339,7 +340,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy if @clone.exist? Dir.chdir(@clone) do # Check for interupted clone from a previous install - unless system 'git', 'status', '-s' + unless system @@git, 'status', '-s' puts "Removing invalid .git repo from cache" FileUtils.rm_rf @clone end @@ -348,7 +349,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy unless @clone.exist? # Note: first-time checkouts are always done verbosely - clone_args = %w[git clone] + clone_args = [@@git, 'clone'] clone_args << '--depth' << '1' if support_depth? case @spec @@ -361,15 +362,15 @@ class GitDownloadStrategy < AbstractDownloadStrategy else puts "Updating #{@clone}" Dir.chdir(@clone) do - safe_system 'git', 'config', 'remote.origin.url', @url + safe_system @@git, 'config', 'remote.origin.url', @url - safe_system 'git', 'config', 'remote.origin.fetch', case @spec + safe_system @@git, 'config', 'remote.origin.fetch', case @spec when :branch then "+refs/heads/#{@ref}:refs/remotes/origin/#{@ref}" when :tag then "+refs/tags/#{@ref}:refs/tags/#{@ref}" else '+refs/heads/master:refs/remotes/origin/master' end - git_args = %w[git fetch origin] + git_args = [@@git, 'fetch', 'origin'] quiet_safe_system(*git_args) end end @@ -382,27 +383,34 @@ class GitDownloadStrategy < AbstractDownloadStrategy ohai "Checking out #{@spec} #{@ref}" case @spec when :branch - nostdout { quiet_safe_system 'git', 'checkout', "origin/#{@ref}", '--' } + nostdout { quiet_safe_system @@git, 'checkout', "origin/#{@ref}", '--' } when :tag, :revision - nostdout { quiet_safe_system 'git', 'checkout', @ref, '--' } + nostdout { quiet_safe_system @@git, 'checkout', @ref, '--' } end else # otherwise the checkout-index won't checkout HEAD # https://github.com/mxcl/homebrew/issues/7124 # must specify origin/HEAD, otherwise it resets to the current local HEAD - quiet_safe_system "git", "reset", "--hard", "origin/HEAD" + quiet_safe_system @@git, "reset", "--hard", "origin/HEAD" end # http://stackoverflow.com/questions/160608/how-to-do-a-git-export-like-svn-export - safe_system 'git', 'checkout-index', '-a', '-f', "--prefix=#{dst}/" + safe_system @@git, 'checkout-index', '-a', '-f', "--prefix=#{dst}/" # check for submodules if File.exist?('.gitmodules') - safe_system 'git', 'submodule', 'init' - safe_system 'git', 'submodule', 'update' - sub_cmd = "git checkout-index -a -f \"--prefix=#{dst}/$path/\"" - safe_system 'git', 'submodule', '--quiet', 'foreach', '--recursive', sub_cmd + safe_system @@git, 'submodule', 'init' + safe_system @@git, 'submodule', 'update' + sub_cmd = "#{@@git} checkout-index -a -f \"--prefix=#{dst}/$path/\"" + safe_system @@git, 'submodule', '--quiet', 'foreach', '--recursive', sub_cmd 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 diff --git a/share/man/man1/brew.1 b/share/man/man1/brew.1 index a1f434f83fc5285d305d58688fc4b8200122c6e9..2208043cb08b2b695843901d00f7562862913699 100644 --- a/share/man/man1/brew.1 +++ b/share/man/man1/brew.1 @@ -409,6 +409,17 @@ Homebrew can install formulae via URL, e\.g\. \fBhttps://raw\.github\.com/mxcl/h .SH "ENVIRONMENT" . .TP +GIT +When using Git, Homebrew will use \fBGIT\fR if set, a Homebrew\-built Git if installed, or the system\-provided binary\. +. +.IP +Set this to force Homebrew to use a particular git binary\. +. +.TP +EDITOR +If set, and \fBHOMEBREW_EDITOR\fR is not, use \fBEDITOR\fR as the text editor\. +. +.TP HOMEBREW_BUILD_FROM_SOURCE If set, instructs Homebrew to compile from source even when a formula provides a bottle\. .