summaryrefslogtreecommitdiff
path: root/lib/codereview
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-01-23 15:10:38 -0500
committerRuss Cox <rsc@golang.org>2014-01-23 15:10:38 -0500
commit77887fc69d5da6881d60072e4621f804e61c013a (patch)
tree8ce8d01ed69ff29a8fa45c846834ca597e867cf4 /lib/codereview
parent13fc45e3f99dab21d052fec3c5e51199bbb46025 (diff)
downloadgo-77887fc69d5da6881d60072e4621f804e61c013a.tar.gz
lib/codereview: add LGTM= line to commit messages
The R= is populated by Rietveld, so it's basically anyone who replied to the CL. The LGTM= is meant to record who actually signed off on the CL. LGTM=r R=r CC=golang-codereviews https://codereview.appspot.com/55390043
Diffstat (limited to 'lib/codereview')
-rw-r--r--lib/codereview/codereview.py25
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/codereview/codereview.py b/lib/codereview/codereview.py
index ec3e9c199..2618ef930 100644
--- a/lib/codereview/codereview.py
+++ b/lib/codereview/codereview.py
@@ -277,7 +277,7 @@ class CL(object):
s += "\tAuthor: " + cl.copied_from + "\n"
if not quick:
s += "\tReviewer: " + JoinComma(cl.reviewer) + "\n"
- for (who, line) in cl.lgtm:
+ for (who, line, _) in cl.lgtm:
s += "\t\t" + who + ": " + line + "\n"
s += "\tCC: " + JoinComma(cl.cc) + "\n"
s += "\tFiles:\n"
@@ -493,9 +493,15 @@ def CutDomain(s):
return s
def JoinComma(l):
+ seen = {}
+ uniq = []
for s in l:
typecheck(s, str)
- return ", ".join(l)
+ if s not in seen:
+ seen[s] = True
+ uniq.append(s)
+
+ return ", ".join(uniq)
def ExceptionDetail():
s = str(sys.exc_info()[0])
@@ -556,7 +562,7 @@ def LoadCL(ui, repo, name, web=True):
if m.get('approval', False) == True or m.get('disapproval', False) == True:
who = re.sub('@.*', '', m.get('sender', ''))
text = re.sub("\n(.|\n)*", '', m.get('text', ''))
- cl.lgtm.append((who, text))
+ cl.lgtm.append((who, text, m.get('approval', False)))
set_status("loaded CL " + name)
return cl, ''
@@ -1928,12 +1934,21 @@ def submit(ui, repo, *pats, **opts):
typecheck(userline, str)
about = ""
- if cl.reviewer:
- about += "R=" + JoinComma([CutDomain(s) for s in cl.reviewer]) + "\n"
+
+ if not cl.lgtm and not opts.get('tbr'):
+ raise hg_util.Abort("this CL has not been LGTM'ed")
+ if cl.lgtm:
+ about += "LGTM=" + JoinComma([CutDomain(who) for (who, line, approval) in cl.lgtm if approval]) + "\n"
+ reviewer = cl.reviewer
if opts.get('tbr'):
tbr = SplitCommaSpace(opts.get('tbr'))
+ for name in tbr:
+ if name.startswith('golang-'):
+ raise hg_util.Abort("--tbr requires a person, not a mailing list")
cl.reviewer = Add(cl.reviewer, tbr)
about += "TBR=" + JoinComma([CutDomain(s) for s in tbr]) + "\n"
+ if reviewer:
+ about += "R=" + JoinComma([CutDomain(s) for s in reviewer]) + "\n"
if cl.cc:
about += "CC=" + JoinComma([CutDomain(s) for s in cl.cc]) + "\n"