upload: add support for setting hashtags
This allows users to specify custom hashtags when uploading, both via
the CLI and via the same gitconfig settings as other upload options.
Bug: https://crbug.com/gerrit/11174
Change-Id: Ia0959e25b463e5f29d704e4d06e0de793d4fc77c
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/255855
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/docs/internal-fs-layout.md b/docs/internal-fs-layout.md
index 0093e87..8e62cde 100644
--- a/docs/internal-fs-layout.md
+++ b/docs/internal-fs-layout.md
@@ -172,6 +172,7 @@
| review.\<url\>.autocopy | upload | Automatically add to `--cc=<value>` |
| review.\<url\>.autoreviewer | upload | Automatically add to `--reviewers=<value>` |
| review.\<url\>.autoupload | upload | Automatically answer "yes" or "no" to all prompts |
+| review.\<url\>.uploadhashtags | upload | Automatically add to `--hashtags=<value>` |
| review.\<url\>.uploadtopic | upload | Default [topic] to use |
| review.\<url\>.username | upload | Override username with `ssh://` review URIs |
| remote.\<remote\>.fetch | sync | Set of refs to fetch |
diff --git a/project.py b/project.py
index e0e9b7f..06606fa 100644
--- a/project.py
+++ b/project.py
@@ -199,6 +199,7 @@
def UploadForReview(self, people,
auto_topic=False,
+ hashtags=(),
draft=False,
private=False,
notify=None,
@@ -209,6 +210,7 @@
self.project.UploadForReview(self.name,
people,
auto_topic=auto_topic,
+ hashtags=hashtags,
draft=draft,
private=private,
notify=notify,
@@ -1331,6 +1333,7 @@
def UploadForReview(self, branch=None,
people=([], []),
auto_topic=False,
+ hashtags=(),
draft=False,
private=False,
notify=None,
@@ -1388,6 +1391,7 @@
opts = []
if auto_topic:
opts += ['topic=' + branch.name]
+ opts += ['t=%s' % p for p in hashtags]
opts += ['r=%s' % p for p in people[0]]
opts += ['cc=%s' % p for p in people[1]]
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 91bec6f..633ddc8 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -130,6 +130,12 @@
of the -t option to the repo command. If unset or set to "false" then
repo will make use of only the command line option.
+review.URL.uploadhashtags:
+
+To add hashtags whenever uploading a commit, you can set a per-project
+or global Git option to do so. The value of review.URL.uploadhashtags
+will be used as comma delimited hashtags like the --hashtags option.
+
# References
Gerrit Code Review: https://www.gerritcodereview.com/
@@ -140,6 +146,9 @@
p.add_option('-t',
dest='auto_topic', action='store_true',
help='Send local branch name to Gerrit Code Review')
+ p.add_option('--hashtag', '--ht',
+ dest='hashtags', action='append', default=[],
+ help='Add hashtags (comma delimited) to the review.')
p.add_option('--re', '--reviewers',
type='string', action='append', dest='reviewers',
help='Request reviews from these people.')
@@ -384,6 +393,20 @@
key = 'review.%s.uploadtopic' % branch.project.remote.review
opt.auto_topic = branch.project.config.GetBoolean(key)
+ # Check if hashtags should be included.
+ def _ExpandHashtag(value):
+ """Split |value| up into comma delimited tags."""
+ if not value:
+ return
+ for tag in value.split(','):
+ tag = tag.strip()
+ if tag:
+ yield tag
+ key = 'review.%s.uploadhashtags' % branch.project.remote.review
+ hashtags = set(_ExpandHashtag(branch.project.config.GetString(key)))
+ for tag in opt.hashtags:
+ hashtags.update(_ExpandHashtag(tag))
+
destination = opt.dest_branch or branch.project.dest_branch
# Make sure our local branch is not setup to track a different remote branch
@@ -401,6 +424,7 @@
branch.UploadForReview(people,
auto_topic=opt.auto_topic,
+ hashtags=hashtags,
draft=opt.draft,
private=opt.private,
notify=None if opt.notify else 'NONE',