diff options
| author | Jack Nagel | 2013-02-14 17:29:58 -0600 |
|---|---|---|
| committer | Jack Nagel | 2013-02-14 17:29:58 -0600 |
| commit | 5bc5bd288c0fa63ee26070101f80110fb6fc7ab0 (patch) | |
| tree | 7ade83c67a7115e049c7f2807ce35571abb1bcc1 /Library | |
| parent | acf60fb66288fb97a6aac85373023660ad6de6d4 (diff) | |
| download | homebrew-5bc5bd288c0fa63ee26070101f80110fb6fc7ab0.tar.bz2 | |
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.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 0ff816999..90f2fe94a 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -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 |
