upload: allow users to set labels when uploading
Bug: https://crbug.com/gerrit/11801
Change-Id: I060465105b4e68ddfc815e572f62bf5dac2c1ffd
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/256614
Tested-by: Mike Frysinger <vapier@google.com>
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
diff --git a/docs/internal-fs-layout.md b/docs/internal-fs-layout.md
index 8050e4f..530252b 100644
--- a/docs/internal-fs-layout.md
+++ b/docs/internal-fs-layout.md
@@ -193,7 +193,8 @@
| 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\>.uploadhashtags | upload | Automatically add to `--hashtag=<value>` |
+| review.\<url\>.uploadlabels | upload | Automatically add to `--label=<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 3138eb1..66a4b3b 100644
--- a/project.py
+++ b/project.py
@@ -201,6 +201,7 @@
dryrun=False,
auto_topic=False,
hashtags=(),
+ labels=(),
draft=False,
private=False,
notify=None,
@@ -213,6 +214,7 @@
dryrun=dryrun,
auto_topic=auto_topic,
hashtags=hashtags,
+ labels=labels,
draft=draft,
private=private,
notify=notify,
@@ -1346,6 +1348,7 @@
dryrun=False,
auto_topic=False,
hashtags=(),
+ labels=(),
draft=False,
private=False,
notify=None,
@@ -1406,6 +1409,7 @@
if auto_topic:
opts += ['topic=' + branch.name]
opts += ['t=%s' % p for p in hashtags]
+ opts += ['l=%s' % p for p in labels]
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 ef6d024..93f9c1e 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -134,7 +134,13 @@
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.
+will be used as comma delimited hashtags like the --hashtag option.
+
+review.URL.uploadlabels:
+
+To add labels whenever uploading a commit, you can set a per-project
+or global Git option to do so. The value of review.URL.uploadlabels
+will be used as comma delimited labels like the --label option.
# References
@@ -152,6 +158,9 @@
p.add_option('--hashtag-branch', '--htb',
action='store_true',
help='Add local branch name as a hashtag.')
+ p.add_option('-l', '--label',
+ dest='labels', action='append', default=[],
+ help='Add a label when uploading.')
p.add_option('--re', '--reviewers',
type='string', action='append', dest='reviewers',
help='Request reviews from these people.')
@@ -410,22 +419,35 @@
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."""
+ def _ExpandCommaList(value):
+ """Split |value| up into comma delimited entries."""
if not value:
return
- for tag in value.split(','):
- tag = tag.strip()
- if tag:
- yield tag
+ for ret in value.split(','):
+ ret = ret.strip()
+ if ret:
+ yield ret
+
+ # Check if hashtags should be included.
key = 'review.%s.uploadhashtags' % branch.project.remote.review
- hashtags = set(_ExpandHashtag(branch.project.config.GetString(key)))
+ hashtags = set(_ExpandCommaList(branch.project.config.GetString(key)))
for tag in opt.hashtags:
- hashtags.update(_ExpandHashtag(tag))
+ hashtags.update(_ExpandCommaList(tag))
if opt.hashtag_branch:
hashtags.add(branch.name)
+ # Check if labels should be included.
+ key = 'review.%s.uploadlabels' % branch.project.remote.review
+ labels = set(_ExpandCommaList(branch.project.config.GetString(key)))
+ for label in opt.labels:
+ labels.update(_ExpandCommaList(label))
+ # Basic sanity check on label syntax.
+ for label in labels:
+ if not re.match(r'^.+[+-][0-9]+$', label):
+ print('repo: error: invalid label syntax "%s": labels use forms '
+ 'like CodeReview+1 or Verified-1' % (label,), file=sys.stderr)
+ sys.exit(1)
+
destination = opt.dest_branch or branch.project.dest_branch
# Make sure our local branch is not setup to track a different remote branch
@@ -445,6 +467,7 @@
dryrun=opt.dryrun,
auto_topic=opt.auto_topic,
hashtags=hashtags,
+ labels=labels,
draft=opt.draft,
private=opt.private,
notify=None if opt.notify else 'NONE',