Avoid unnecessary invocations of "git fetch"
If we already have the correct commit, it is not necessary to fetch. Any
fetches can takes minutes due to gerrit problems, and often fail
completely, so it is helpful to avoid them completely whenever we can.
Bug: 938627
Change-Id: I54494cad9b9aa0090f51674b6b9f56bb3e842f12
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1504102
Commit-Queue: Michael Spang <spang@chromium.org>
Reviewed-by: Edward Lesmes <ehmaldonado@chromium.org>
diff --git a/gclient_scm.py b/gclient_scm.py
index 70ec6a9..9564daa 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -652,14 +652,18 @@
raise gclient_utils.Error('Invalid Upstream: %s' % upstream_branch)
self._SetFetchConfig(options)
- self._Fetch(options, prune=options.force)
+ # Fetch upstream if we don't already have |revision|.
if not scm.GIT.IsValidRevision(self.checkout_path, revision, sha_only=True):
- # Update the remotes first so we have all the refs.
- remote_output = scm.GIT.Capture(['remote'] + verbose + ['update'],
- cwd=self.checkout_path)
- if verbose:
- self.Print(remote_output)
+ self._Fetch(options, prune=options.force)
+
+ if not scm.GIT.IsValidRevision(self.checkout_path, revision,
+ sha_only=True):
+ # Update the remotes first so we have all the refs.
+ remote_output = scm.GIT.Capture(['remote'] + verbose + ['update'],
+ cwd=self.checkout_path)
+ if verbose:
+ self.Print(remote_output)
revision = self._AutoFetchRef(options, revision)