Update origin/HEAD automatically

If origin/HEAD resolves to `master`, depot_tools can check if
origin/main exists. If so, it's very likely that origin/HEAD should be
updated to point to origin/main.
In the worst case, this will result in extra git remote call while not
changing local state (i.e origin/HEAD remained unchanged).

R=gavinmak@google.com

Bug: 1190702
Change-Id: I51e69d7a95d3534e1820099b4b6983d38b5e2763
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2795075
Reviewed-by: Gavin Mak <gavinmak@google.com>
Commit-Queue: Josip Sokcevic <sokcevic@google.com>
diff --git a/git_common.py b/git_common.py
index 4463541..523f628 100644
--- a/git_common.py
+++ b/git_common.py
@@ -683,7 +683,16 @@
 def upstream_default():
   """Returns the default branch name of the origin repository."""
   try:
-    return run('rev-parse', '--abbrev-ref', 'origin/HEAD')
+    ret = run('rev-parse', '--abbrev-ref', 'origin/HEAD')
+    # Detect if the repository migrated to main branch
+    if ret == 'origin/master':
+      try:
+        ret = run('rev-parse', '--abbrev-ref', 'origin/main')
+        run('remote', 'set-head', '-a', 'origin')
+        ret = run('rev-parse', '--abbrev-ref', 'origin/HEAD')
+      except subprocess2.CalledProcessError:
+        pass
+    return ret
   except subprocess2.CalledProcessError:
     return 'origin/master'