| Index: git_cl.py
|
| diff --git a/git_cl.py b/git_cl.py
|
| index fbe52afe0c6293fc0634a26e086d6ec143f4a659..f50e7023f329324eb383c179682bc2a2ebe4720c 100755
|
| --- a/git_cl.py
|
| +++ b/git_cl.py
|
| @@ -284,6 +284,7 @@ class Settings(object):
|
| self.is_gerrit = None
|
| self.git_editor = None
|
| self.project = None
|
| + self.force_https_commit_url = None
|
| self.pending_ref_prefix = None
|
|
|
| def LazyUpdateIfNeeded(self):
|
| @@ -455,6 +456,12 @@ class Settings(object):
|
| self.project = self._GetRietveldConfig('project', error_ok=True)
|
| return self.project
|
|
|
| + def GetForceHttpsCommitUrl(self):
|
| + if not self.force_https_commit_url:
|
| + self.force_https_commit_url = self._GetRietveldConfig(
|
| + 'force-https-commit-url', error_ok=True)
|
| + return self.force_https_commit_url
|
| +
|
| def GetPendingRefPrefix(self):
|
| if not self.pending_ref_prefix:
|
| self.pending_ref_prefix = self._GetRietveldConfig(
|
| @@ -674,6 +681,19 @@ or verify this branch is set up to track another (via the --track argument to
|
| return RunGit(['config', 'branch.%s.base-url' % self.GetBranch()],
|
| error_ok=True).strip()
|
|
|
| + def GetGitSvnRemoteUrl(self):
|
| + """Return the configured git-svn remote URL parsed from git svn info.
|
| +
|
| + Returns None if it is not set.
|
| + """
|
| + # 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)
|
| + return keys.get('URL', None)
|
| + return None
|
| +
|
| def GetRemoteUrl(self):
|
| """Return the configured remote URL, e.g. 'git://example.org/foo.git/'.
|
|
|
| @@ -1170,6 +1190,8 @@ def LoadCodereviewSettingsFromFile(fileobj):
|
| SetProperty('viewvc-url', 'VIEW_VC', unset_error_ok=True)
|
| SetProperty('bug-prefix', 'BUG_PREFIX', unset_error_ok=True)
|
| SetProperty('cpplint-regex', 'LINT_REGEX', unset_error_ok=True)
|
| + SetProperty('force-https-commit-url', 'FORCE_HTTPS_COMMIT_URL',
|
| + unset_error_ok=True)
|
| SetProperty('cpplint-ignore-regex', 'LINT_IGNORE_REGEX', unset_error_ok=True)
|
| SetProperty('project', 'PROJECT', unset_error_ok=True)
|
| SetProperty('pending-ref-prefix', 'PENDING_REF_PREFIX', unset_error_ok=True)
|
| @@ -1718,12 +1740,7 @@ def RietveldUpload(options, args, cl, change):
|
| 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)
|
| + remote_url = cl.GetGitSvnRemoteUrl()
|
| else:
|
| if cl.GetRemoteUrl() and '/' in cl.GetUpstreamBranch():
|
| remote_url = (cl.GetRemoteUrl() + '@'
|
| @@ -2098,9 +2115,19 @@ def SendUpstream(parser, args, cmd):
|
| revision = RunGit(['rev-parse', 'HEAD']).strip()
|
| else:
|
| # dcommit the merge branch.
|
| - _, output = RunGitWithCode(['svn', 'dcommit',
|
| - '-C%s' % options.similarity,
|
| - '--no-rebase', '--rmdir'])
|
| + cmd = [
|
| + 'svn', 'dcommit',
|
| + '-C%s' % options.similarity,
|
| + '--no-rebase', '--rmdir',
|
| + ]
|
| + if settings.GetForceHttpsCommitUrl():
|
| + # Allow forcing https commit URLs for some projects that don't allow
|
| + # committing to http URLs (like Google Code).
|
| + remote_url = cl.GetGitSvnRemoteUrl()
|
| + if urlparse.urlparse(remote_url).scheme == 'http':
|
| + remote_url = remote_url.replace('http://', 'https://')
|
| + cmd.append('--commit-url=%s' % remote_url)
|
| + _, output = RunGitWithCode(cmd)
|
| if 'Committed r' in output:
|
| revision = re.match(
|
| '.*?\nCommitted r(\\d+)', output, re.DOTALL).group(1)
|
|
|