Chromium Code Reviews| 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. |