Skip updating remotes if we already have the upstream revision.

This should make a `gclient sync` faster, especially on Windows, where git hangs regularly.

BUG=none
TEST=gclient sync -v doesn't print "Fetching origin" all the time


Review URL: https://chromiumcodereview.appspot.com/10668020

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@143898 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gclient_scm.py b/gclient_scm.py
index 68f3be3..0f34d38 100644
--- a/gclient_scm.py
+++ b/gclient_scm.py
@@ -353,27 +353,28 @@
       else:
         raise gclient_utils.Error('Invalid Upstream: %s' % upstream_branch)
 
-    # Update the remotes first so we have all the refs.
-    backoff_time = 5
-    for _ in range(10):
-      try:
-        remote_output = scm.GIT.Capture(
-            ['remote'] + verbose + ['update'],
-            cwd=self.checkout_path)
-        break
-      except subprocess2.CalledProcessError, e:
-        # Hackish but at that point, git is known to work so just checking for
-        # 502 in stderr should be fine.
-        if '502' in e.stderr:
-          print(str(e))
-          print('Sleeping %.1f seconds and retrying...' % backoff_time)
-          time.sleep(backoff_time)
-          backoff_time *= 1.3
-          continue
-        raise
+    if not scm.GIT.IsValidRevision(cwd=self.checkout_path, rev=revision):
+      # Update the remotes first so we have all the refs.
+      backoff_time = 5
+      for _ in range(10):
+        try:
+          remote_output = scm.GIT.Capture(
+              ['remote'] + verbose + ['update'],
+              cwd=self.checkout_path)
+          break
+        except subprocess2.CalledProcessError, e:
+          # Hackish but at that point, git is known to work so just checking for
+          # 502 in stderr should be fine.
+          if '502' in e.stderr:
+            print(str(e))
+            print('Sleeping %.1f seconds and retrying...' % backoff_time)
+            time.sleep(backoff_time)
+            backoff_time *= 1.3
+            continue
+          raise
 
-    if verbose:
-      print(remote_output.strip())
+      if verbose:
+        print(remote_output.strip())
 
     # This is a big hammer, debatable if it should even be here...
     if options.force or options.reset: