1
0
mirror of https://github.com/golang/go synced 2024-11-25 12:57:58 -07:00

codereview: record repository, base revision

Include repository URL in initial mail.
Record repository and base revision in patch description.

R=r
CC=golang-dev
https://golang.org/cl/4126052
This commit is contained in:
Russ Cox 2011-02-02 16:39:31 -05:00
parent 029bbe18e0
commit fdb46fb470

View File

@ -253,7 +253,7 @@ class CL(object):
def Flush(self, ui, repo): def Flush(self, ui, repo):
if self.name == "new": if self.name == "new":
self.Upload(ui, repo, gofmt_just_warn=True) self.Upload(ui, repo, gofmt_just_warn=True, creating=True)
dir = CodeReviewDir(ui, repo) dir = CodeReviewDir(ui, repo)
path = dir + '/cl.' + self.name path = dir + '/cl.' + self.name
f = open(path+'!', "w") f = open(path+'!', "w")
@ -279,8 +279,8 @@ class CL(object):
typecheck(s, str) typecheck(s, str)
return s return s
def Upload(self, ui, repo, send_mail=False, gofmt=True, gofmt_just_warn=False): def Upload(self, ui, repo, send_mail=False, gofmt=True, gofmt_just_warn=False, creating=False, quiet=False):
if not self.files: if not self.files and not creating:
ui.warn("no files in change list\n") ui.warn("no files in change list\n")
if ui.configbool("codereview", "force_gofmt", True) and gofmt: if ui.configbool("codereview", "force_gofmt", True) and gofmt:
CheckFormat(ui, repo, self.files, just_warn=gofmt_just_warn) CheckFormat(ui, repo, self.files, just_warn=gofmt_just_warn)
@ -292,15 +292,20 @@ class CL(object):
("cc", JoinComma(self.cc)), ("cc", JoinComma(self.cc)),
("description", self.desc), ("description", self.desc),
("base_hashes", ""), ("base_hashes", ""),
# Would prefer not to change the subject
# on reupload, but /upload requires it.
("subject", self.Subject()),
] ]
if self.name != "new": if self.name != "new":
form_fields.append(("issue", self.name)) form_fields.append(("issue", self.name))
vcs = None vcs = None
if self.files: # We do not include files when creating the issue,
# because we want the patch sets to record the repository
# and base revision they are diffs against. We use the patch
# set message for that purpose, but there is no message with
# the first patch set. Instead the message gets used as the
# new CL's overall subject. So omit the diffs when creating
# and then we'll run an immediate upload.
# This has the effect that every CL begins with an empty "Patch set 1".
if self.files and not creating:
vcs = MercurialVCS(upload_options, ui, repo) vcs = MercurialVCS(upload_options, ui, repo)
data = vcs.GenerateDiff(self.files) data = vcs.GenerateDiff(self.files)
files = vcs.GetBaseFiles(data) files = vcs.GetBaseFiles(data)
@ -311,6 +316,12 @@ class CL(object):
uploaded_diff_file = [("data", "data.diff", data)] uploaded_diff_file = [("data", "data.diff", data)]
else: else:
uploaded_diff_file = [("data", "data.diff", emptydiff)] uploaded_diff_file = [("data", "data.diff", emptydiff)]
if vcs and self.name != "new":
form_fields.append(("subject", "diff -r " + vcs.base_rev + " " + getremote(ui, repo, {}).path))
else:
# First upload sets the subject for the CL itself.
form_fields.append(("subject", self.Subject()))
ctype, body = EncodeMultipartFormData(form_fields, uploaded_diff_file) ctype, body = EncodeMultipartFormData(form_fields, uploaded_diff_file)
response_body = MySend("/upload", body, content_type=ctype) response_body = MySend("/upload", body, content_type=ctype)
patchset = None patchset = None
@ -320,6 +331,9 @@ class CL(object):
msg = lines[0] msg = lines[0]
patchset = lines[1].strip() patchset = lines[1].strip()
patches = [x.split(" ", 1) for x in lines[2:]] patches = [x.split(" ", 1) for x in lines[2:]]
if response_body.startswith("Issue updated.") and quiet:
pass
else:
ui.status(msg + "\n") ui.status(msg + "\n")
set_status("uploaded CL metadata + diffs") set_status("uploaded CL metadata + diffs")
if not response_body.startswith("Issue created.") and not response_body.startswith("Issue updated."): if not response_body.startswith("Issue created.") and not response_body.startswith("Issue updated."):
@ -342,14 +356,15 @@ class CL(object):
self.Flush(ui, repo) self.Flush(ui, repo)
return return
def Mail(self, ui,repo): def Mail(self, ui, repo):
pmsg = "Hello " + JoinComma(self.reviewer) pmsg = "Hello " + JoinComma(self.reviewer)
if self.cc: if self.cc:
pmsg += " (cc: %s)" % (', '.join(self.cc),) pmsg += " (cc: %s)" % (', '.join(self.cc),)
pmsg += ",\n" pmsg += ",\n"
pmsg += "\n" pmsg += "\n"
repourl = getremote(ui, repo, {}).path
if not self.mailed: if not self.mailed:
pmsg += "I'd like you to review this change.\n" pmsg += "I'd like you to review this change to\n" + repourl + "\n"
else: else:
pmsg += "Please take another look.\n" pmsg += "Please take another look.\n"
typecheck(pmsg, str) typecheck(pmsg, str)
@ -1082,7 +1097,10 @@ def change(ui, repo, *pats, **opts):
dirty[cl] = True dirty[cl] = True
for d, _ in dirty.items(): for d, _ in dirty.items():
name = d.name
d.Flush(ui, repo) d.Flush(ui, repo)
if name == "new":
d.Upload(ui, repo, quiet=True)
if opts["stdout"]: if opts["stdout"]:
ui.write(cl.EditorText()) ui.write(cl.EditorText())