diff options
| author | Jack Nagel | 2012-04-23 20:21:12 -0500 | 
|---|---|---|
| committer | Jack Nagel | 2012-05-01 21:46:42 -0500 | 
| commit | 7718c939b06987ff8f1ecd599c8ace6f998ce180 (patch) | |
| tree | 492e87ae10859719dba5c00ec2678fc81b04a0db /Library | |
| parent | 853a8de5ea80f29303c787148f70a283f25ffc3b (diff) | |
| download | homebrew-7718c939b06987ff8f1ecd599c8ace6f998ce180.tar.bz2 | |
GitDownloadStrategy optimization
The current series of fetch invocations in GitDownloadStrategy has the
unfortunate behavior of fetching full history even in shallow clones
that only need the history between the clone point and the remote HEAD.
It should be possible to determine if it is actually necessary to fetch
the full history, including all tags, and if it is not to avoid this
overhead.
Fixes #11958, and several other recurring problems.
Signed-off-by: Jack Nagel <jacknagel@gmail.com>
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Formula/git-multipush.rb | 4 | ||||
| -rw-r--r-- | Library/Formula/reattach-to-user-namespace.rb | 2 | ||||
| -rw-r--r-- | Library/Formula/topgit.rb | 2 | ||||
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 43 | 
4 files changed, 31 insertions, 20 deletions
| diff --git a/Library/Formula/git-multipush.rb b/Library/Formula/git-multipush.rb index 7ab88fd74..a6c70b4b7 100644 --- a/Library/Formula/git-multipush.rb +++ b/Library/Formula/git-multipush.rb @@ -5,13 +5,13 @@ class GitMultipush < Formula    url 'http://git-multipush.googlecode.com/files/git-multipush-2.3.tar.bz2'    sha1 'a53f171af5e794afe9b1de6ccd9bd0661db6fd91' -  head 'https://github.com/gavinbeatty/git-multipush.git', :sha => 'HEAD' +  head 'https://github.com/gavinbeatty/git-multipush.git', :revision => 'HEAD'    depends_on 'asciidoc' => :build if ARGV.build_head?    def install      if ARGV.build_head? -      ENV['GIT_DIR'] = cached_location/'.git' +      ENV['GIT_DIR'] = cached_download/'.git'        inreplace 'make/gen-version.mk', '.git', '$(GIT_DIR)'        system "make"      end diff --git a/Library/Formula/reattach-to-user-namespace.rb b/Library/Formula/reattach-to-user-namespace.rb index aed66dadc..7f9357399 100644 --- a/Library/Formula/reattach-to-user-namespace.rb +++ b/Library/Formula/reattach-to-user-namespace.rb @@ -3,7 +3,7 @@ require 'formula'  class ReattachToUserNamespace < Formula    head 'https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git'    homepage 'https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard' -  url 'https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git', :tag => 'dadea0aa48259c704d0b412b9588de2f5623e323' +  url 'https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git', :revision => 'dadea0aa48259c704d0b412b9588de2f5623e323'    version 'dadea0'    def options diff --git a/Library/Formula/topgit.rb b/Library/Formula/topgit.rb index bca8c570a..9d5032642 100644 --- a/Library/Formula/topgit.rb +++ b/Library/Formula/topgit.rb @@ -2,7 +2,7 @@ require 'formula'  class Topgit < Formula    homepage 'http://repo.or.cz/w/topgit.git' -  url 'git://repo.or.cz/topgit.git', :tag => '1744aca50f3d7b6b4863523207e5010e112dfb85' +  url 'git://repo.or.cz/topgit.git', :revision => '1744aca50f3d7b6b4863523207e5010e112dfb85'    version '0.8'    def install diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 6b8aff900..6a5dd6ac7 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -324,14 +324,10 @@ class GitDownloadStrategy < AbstractDownloadStrategy    end    def support_depth? -    !commit_history_required? and depth_supported_host? +    @spec != :revision and host_supports_depth?    end -  def commit_history_required? -    @spec == :sha -  end - -  def depth_supported_host? +  def host_supports_depth?      @url =~ %r(git://) or @url =~ %r(https://github.com/)    end @@ -352,16 +348,31 @@ class GitDownloadStrategy < AbstractDownloadStrategy      unless @clone.exist?        # Note: first-time checkouts are always done verbosely -      git_args = %w(git clone) -      git_args << "--depth" << "1" if support_depth? -      git_args << @url << @clone -      safe_system(*git_args) +      clone_args = %w[git clone] +      clone_args << '--single-branch' +      clone_args << '--depth' << '1' if support_depth? + +      case @spec +      when :branch, :tag +        clone_args << '--branch' << @ref +      end + +      clone_args << @url << @clone +      safe_system(*clone_args)      else        puts "Updating #{@clone}"        Dir.chdir(@clone) do -        safe_system 'git', 'remote', 'set-url', 'origin', @url -        quiet_safe_system 'git', 'fetch', 'origin' -        quiet_safe_system 'git', 'fetch', '--tags' if @spec == :tag +        safe_system 'git', 'config', 'remote.origin.url', @url + +        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 << '--depth' << '1' if support_depth? +        quiet_safe_system(*git_args)        end      end    end @@ -373,9 +384,9 @@ class GitDownloadStrategy < AbstractDownloadStrategy          ohai "Checking out #{@spec} #{@ref}"          case @spec          when :branch -          nostdout { quiet_safe_system 'git', 'checkout', "origin/#{@ref}" } -        when :tag, :sha -          nostdout { quiet_safe_system 'git', 'checkout', @ref } +          nostdout { quiet_safe_system 'git', 'checkout', "origin/#{@ref}", '--' } +        when :tag, :revision +          nostdout { quiet_safe_system 'git', 'checkout', @ref, '--' }          end        else          # otherwise the checkout-index won't checkout HEAD | 
