Allow overriding base-url in git-cl.
This is useful if git-cl has no way to find out the original svn repo's url
and the user does not wish to configure git-svn and fetch the repository.
Review URL: http://codereview.chromium.org/9969099
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@130372 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index c332423..cf113b8 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -411,6 +411,13 @@
GIT_INSTRUCTIONS_URL)
return self._remote
+ def GetGitBaseUrlFromConfig(self):
+ """Return the configured base URL from branch.<branchname>.baseurl.
+
+ Returns None if it is not set.
+ """
+ return RunGit(['config', 'branch.%s.base-url' % self.GetBranch()],
+ error_ok=True).strip()
def GetRemoteUrl(self):
"""Return the configured remote URL, e.g. 'git://example.org/foo.git/'.
@@ -787,6 +794,21 @@
return 0
+def CMDbaseurl(parser, args):
+ """get or set base-url for this branch"""
+ branchref = RunGit(['symbolic-ref', 'HEAD']).strip()
+ branch = ShortBranchName(branchref)
+ _, args = parser.parse_args(args)
+ if not args:
+ print("Current base-url:")
+ return RunGit(['config', 'branch.%s.base-url' % branch],
+ error_ok=False).strip()
+ else:
+ print("Setting base-url to %s" % args[0])
+ return RunGit(['config', 'branch.%s.base-url' % branch, args[0]],
+ error_ok=False).strip()
+
+
def CMDstatus(parser, args):
"""show status of changelists"""
parser.add_option('--field',
@@ -982,18 +1004,19 @@
# Include the upstream repo's URL in the change -- this is useful for
# projects that have their source spread across multiple repos.
- remote_url = None
- if settings.GetIsGitSvn():
- # URL is dependent on the current directory.
- data = RunGit(['svn', 'info'], cwd=settings.GetRoot())
- if data:
- keys = dict(line.split(': ', 1) for line in data.splitlines()
- if ': ' in line)
- remote_url = keys.get('URL', None)
- else:
- if cl.GetRemoteUrl() and '/' in cl.GetUpstreamBranch():
- remote_url = (cl.GetRemoteUrl() + '@'
- + cl.GetUpstreamBranch().split('/')[-1])
+ remote_url = cl.GetGitBaseUrlFromConfig()
+ if not remote_url:
+ if settings.GetIsGitSvn():
+ # URL is dependent on the current directory.
+ data = RunGit(['svn', 'info'], cwd=settings.GetRoot())
+ if data:
+ keys = dict(line.split(': ', 1) for line in data.splitlines()
+ if ': ' in line)
+ remote_url = keys.get('URL', None)
+ else:
+ if cl.GetRemoteUrl() and '/' in cl.GetUpstreamBranch():
+ remote_url = (cl.GetRemoteUrl() + '@'
+ + cl.GetUpstreamBranch().split('/')[-1])
if remote_url:
upload_args.extend(['--base_url', remote_url])