Gerrit git cl upload: implement patchset title (message).
R=machenbach@chromium.org,andybons@chromium.org
BUG=579178
Review URL: https://codereview.chromium.org/1886433003
git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@299886 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/git_cl.py b/git_cl.py
index b112156..4750939 100755
--- a/git_cl.py
+++ b/git_cl.py
@@ -2235,11 +2235,6 @@
branch = GetTargetRef(remote, remote_branch, options.target_branch,
pending_prefix='')
- if options.title:
- # TODO(tandrii): it's now supported by Gerrit, implement!
- print "\nPatch titles (-t) are not supported in Gerrit. Aborting..."
- return 1
-
if options.squash:
if not self.GetIssue():
# TODO(tandrii): deperecate this after 2016Q2. Backwards compatibility
@@ -2387,6 +2382,16 @@
change_desc.update_reviewers(options.reviewers, options.tbr_owners,
change)
+ # Extra options that can be specified at push time. Doc:
+ # https://gerrit-review.googlesource.com/Documentation/user-upload.html
+ refspec_opts = []
+ if options.title:
+ # Per doc, spaces must be converted to underscores, and Gerrit will do the
+ # reverse on its side.
+ if '_' in options.title:
+ print('WARNING: underscores in title will be converted to spaces.')
+ refspec_opts.append('m=' + options.title.replace(' ', '_'))
+
receive_options = []
cc = self.GetCCList().split(',')
if options.cc:
@@ -2398,13 +2403,24 @@
receive_options.extend(
'--reviewer=' + email for email in change_desc.get_reviewers())
- git_command = ['push']
+ git_command = ['git', 'push']
if receive_options:
+ # TODO(tandrii): clean this up in follow up. This doesn't work, as it gets
+ # totally ignored by Gerrit.
git_command.append('--receive-pack=git receive-pack %s' %
' '.join(receive_options))
- git_command += [gerrit_remote, ref_to_push + ':refs/for/' + branch]
+
+ refspec_suffix = ''
+ if refspec_opts:
+ refspec_suffix = '%' + ','.join(refspec_opts)
+ assert ' ' not in refspec_suffix, (
+ 'spaces not allowed in refspec: "%s"' % refspec_suffix)
+
+ refspec = '%s:refs/for/%s%s' % (ref_to_push, branch, refspec_suffix)
+ git_command += [gerrit_remote, refspec]
+
push_stdout = gclient_utils.CheckCallAndFilter(
- ['git'] + git_command,
+ git_command,
print_stdout=True,
# Flush after every line: useful for seeing progress when running as
# recipe.