aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorJack Nagel2012-04-23 20:21:12 -0500
committerJack Nagel2012-05-01 21:46:42 -0500
commit7718c939b06987ff8f1ecd599c8ace6f998ce180 (patch)
tree492e87ae10859719dba5c00ec2678fc81b04a0db /Library
parent853a8de5ea80f29303c787148f70a283f25ffc3b (diff)
downloadhomebrew-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.rb4
-rw-r--r--Library/Formula/reattach-to-user-namespace.rb2
-rw-r--r--Library/Formula/topgit.rb2
-rw-r--r--Library/Homebrew/download_strategy.rb43
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