Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(455)

Unified Diff: git_cl.py

Issue 822503005: Support --target-branch option to git-cl upload for Rietveld (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: generalize branch recognition Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: git_cl.py
diff --git a/git_cl.py b/git_cl.py
index 4c91b6c762147b7ce5c886df94d8fdd906995725..84308a35908ba06edaf1f5d372a7d70cfcd45ded 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -1749,6 +1749,34 @@ def RietveldUpload(options, args, cl, change):
upload_args.extend(['--base_url', remote_url])
remote, remote_branch = cl.GetRemoteBranch()
if remote and remote_branch:
+ if options.target_branch:
+ # Cannonicalize branch references to the equivalent local full symbolic
+ # refs, which are then translated into the remote full symbolic refs
+ # below.
+ if '/' not in options.target_branch:
+ remote_branch = 'refs/remotes/%s/%s' % (remote, options.target_branch)
+ else:
+ prefix_replacements = (('^((refs/)?remotes/)?branch-heads/',
agable 2015/01/22 22:59:11 nit: would prefer these be formatted as prefix_re
Mike Wittman 2015/01/23 23:54:47 Done.
+ 'refs/remotes/branch-heads/'),
+ ('^((refs/)?remotes/)?%s/' % remote,
+ 'refs/remotes/%s/' % remote),
+ ('^(refs/)?heads/',
+ 'refs/remotes/%s/' % remote))
+
+ match = None
+ for regex, replacement in prefix_replacements:
+ match = re.search(regex, options.target_branch)
+ if match:
+ remote_branch = options.target_branch.replace(match.group(0),
+ replacement)
+ break
+ if not match:
+ # This is a branch path but not one we recognize; use as-is.
+ remote_branch = options.target_branch
+ elif not remote_branch.startswith('refs/remotes/branch-heads'):
+ # Default to master for refs that are not branches.
+ remote_branch = 'refs/remotes/%s/master' % remote
+
# Create the true path to the remote branch.
# Does the following translation:
# * refs/remotes/origin/refs/diff/test -> refs/diff/test
@@ -1842,8 +1870,8 @@ def CMDupload(parser, args):
help='set the review private (rietveld only)')
parser.add_option('--target_branch',
'--target-branch',
- help='When uploading to gerrit, remote branch to '
- 'use for CL. Default: master')
+ help='Remote branch to use for CL. ' +
agable 2015/01/22 22:59:11 "to use for" is awkward and not super specific. No
Mike Wittman 2015/01/23 23:54:47 Cleaned this up by referring to a metavar.
+ 'Default: remote branch head, or master')
agable 2015/01/22 22:59:11 nit: indentation
Mike Wittman 2015/01/23 23:54:47 Done.
parser.add_option('--email', default=None,
help='email address to use to connect to Rietveld')
parser.add_option('--tbr-owners', dest='tbr_owners', action='store_true',
@@ -1852,9 +1880,6 @@ def CMDupload(parser, args):
add_git_similarity(parser)
(options, args) = parser.parse_args(args)
- if options.target_branch and not settings.GetIsGerrit():
- parser.error('Use --target_branch for non gerrit repository.')
-
if is_dirty_git_tree('upload'):
return 1
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698