GitDownloadStrategy: only fetch from remote when necessary

When we are building from a tag, and that tag is already present in the
cached repository, we don't to hit the network; everything we need
already exists.
This commit is contained in:
Jack Nagel 2013-02-14 17:29:58 -06:00
parent 02ad6442e7
commit 5f5d6ace5f

View File

@ -320,7 +320,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy
puts "Updating #@clone"
Dir.chdir(@clone) do
config_repo
fetch_repo
update_repo
checkout
update_submodules if submodules?
end
@ -352,6 +352,14 @@ class GitDownloadStrategy < AbstractDownloadStrategy
private
def git_dir
@clone.join(".git")
end
def has_tag?(tag)
quiet_system @@git, '--git-dir', git_dir, 'rev-parse', '-q', '--verify', tag
end
def support_depth?
@spec != :revision and host_supports_depth?
end
@ -361,7 +369,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy
end
def repo_valid?
quiet_system @@git, "--git-dir", "#@clone/.git", "status", "-s"
quiet_system @@git, "--git-dir", git_dir, "status", "-s"
end
def submodules?
@ -392,8 +400,10 @@ class GitDownloadStrategy < AbstractDownloadStrategy
safe_system @@git, 'config', 'remote.origin.fetch', refspec
end
def fetch_repo
quiet_safe_system @@git, 'fetch', 'origin'
def update_repo
unless @spec == :tag && has_tag?(@ref)
quiet_safe_system @@git, 'fetch', 'origin'
end
end
def clone_repo