use canonical base URL for projects

BUG=372645
R=iannucci@chromium.org, sergeyberezin@chromium.org

Review URL: https://codereview.chromium.org/271703010

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@270460 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index 06594f0..6e56401 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -635,12 +635,17 @@
     return True
 
   def GetGitBaseUrlFromConfig(self):
-    """Return the configured base URL from branch.<branchname>.baseurl.
+    """Return the configured base URL from branch.<branchname>.canonical-url.
 
     Returns None if it is not set.
     """
-    return RunGit(['config', 'branch.%s.base-url' % self.GetBranch()],
-                  error_ok=True).strip()
+    branch = self.GetBranch()
+    url = RunGit(['config', 'branch.%s.canonical-url' % branch],
+                 error_ok=True).strip()
+    if not url:
+      url = RunGit(['config', 'branch.%s.base-url' % branch],
+                   error_ok=True).strip()
+    return url
 
   def GetRemoteUrl(self):
     """Return the configured remote URL, e.g. 'git://example.org/foo.git/'.
@@ -1074,6 +1079,13 @@
     RunGit(['config', keyvals['PUSH_URL_CONFIG'],
             keyvals['ORIGIN_URL_CONFIG']])
 
+  if 'CANONICAL_URL' in keyvals:
+    branchref = RunGit(['symbolic-ref', 'HEAD']).strip()
+    branch = ShortBranchName(branchref)
+    RunGit(['config', 'branch.%s.canonical-url' % branch,
+            keyvals['CANONICAL_URL']],
+          error_ok=False)
+
 
 def urlretrieve(source, destination):
   """urllib is broken for SSL connections via a proxy therefore we
diff --git a/tests/git_cl_test.py b/tests/git_cl_test.py
index 2d20440..a6aa287 100755
--- a/tests/git_cl_test.py
+++ b/tests/git_cl_test.py
@@ -204,6 +204,7 @@
     return [
         ((['git', 'config', 'core.editor'],), ''),
     ] + cc_call + private_call + [
+        ((['git', 'config', 'branch.master.canonical-url'],), ''),
         ((['git', 'config', 'branch.master.base-url'],), ''),
         ((['git',
            'config', '--local', '--get-regexp', '^svn-remote\\.'],),