Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(28)

Unified Diff: gclient_scm.py

Issue 343523002: Refactor cache-updating code to eliminate unnecessary fetches. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | git_cache.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gclient_scm.py
diff --git a/gclient_scm.py b/gclient_scm.py
index 26d96585cc667c0b7fd54a62372171e1c732b7e1..67d68674e04fd5f0c42084529551a1fa35c181f5 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -356,8 +356,6 @@ class GitWrapper(SCMWrapper):
verbose = ['--verbose']
printed_path = True
- url = self._CreateOrUpdateCache(url, options)
-
if revision.startswith('refs/'):
rev_type = "branch"
elif revision.startswith(self.remote + '/'):
@@ -368,9 +366,15 @@ class GitWrapper(SCMWrapper):
# hash is also a tag, only make a distinction at checkout
rev_type = "hash"
+ mirror = self._GetMirror(url, options)
+ if mirror:
+ url = mirror.mirror_path
+
if (not os.path.exists(self.checkout_path) or
(os.path.isdir(self.checkout_path) and
not os.path.exists(os.path.join(self.checkout_path, '.git')))):
+ if mirror:
+ self._UpdateMirror(mirror, options)
try:
self._Clone(revision, url, options)
except subprocess2.CalledProcessError:
@@ -394,6 +398,9 @@ class GitWrapper(SCMWrapper):
self.Print('________ unmanaged solution; skipping %s' % self.relpath)
return self._Capture(['rev-parse', '--verify', 'HEAD'])
+ if mirror:
+ self._UpdateMirror(mirror, options)
+
# See if the url has changed (the unittests use git://foo for the url, let
# that through).
current_url = self._Capture(['config', 'remote.%s.url' % self.remote])
@@ -745,14 +752,10 @@ class GitWrapper(SCMWrapper):
base_url = self.url
return base_url[:base_url.rfind('/')] + url
- def _CreateOrUpdateCache(self, url, options):
- """Make a new git mirror or update existing mirror for |url|, and return the
- mirror URI to clone from.
-
- If no cache-dir is specified, just return |url| unchanged.
- """
- if not self.cache_dir:
- return url
+ def _GetMirror(self, url, options):
+ """Get a git_cache.Mirror object for the argument url."""
+ if not git_cache.Mirror.GetCachePath():
+ return None
mirror_kwargs = {
'print_func': self.filter,
'refs': []
@@ -765,10 +768,14 @@ class GitWrapper(SCMWrapper):
# mirror_kwargs['refs'].extend(['refs/tags/lkgr', 'refs/tags/lkcr'])
if hasattr(options, 'with_branch_heads') and options.with_branch_heads:
mirror_kwargs['refs'].append('refs/branch-heads/*')
- mirror = git_cache.Mirror(url, **mirror_kwargs)
+ return git_cache.Mirror(url, **mirror_kwargs)
+
+ @staticmethod
+ def _UpdateMirror(mirror, options):
+ """Update a git mirror by fetching the latest commits from the remote."""
if options.shallow:
# HACK(hinoka): These repositories should be super shallow.
iannucci 2014/06/17 23:08:17 oh, huge barf... this is why we can't have nice th
- if 'flash' in url:
+ if 'flash' in mirror.url:
depth = 10
else:
depth = 10000
@@ -776,7 +783,6 @@ class GitWrapper(SCMWrapper):
depth = None
mirror.populate(verbose=options.verbose, bootstrap=True, depth=depth)
mirror.unlock()
- return mirror.mirror_path if mirror.exists() else None
def _Clone(self, revision, url, options):
"""Clone a git repository from the given URL.
« no previous file with comments | « no previous file | git_cache.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698