Index: gcl.py |
diff --git a/gcl.py b/gcl.py |
index ce6edabab23214f7e5bceca346bc895305e2a726..f9761e74e578bfe9192c1082322304a88fd7abb4 100755 |
--- a/gcl.py |
+++ b/gcl.py |
@@ -24,6 +24,7 @@ import breakpad # pylint: disable=W0611 |
import fix_encoding |
import gclient_utils |
+import git_cl |
import presubmit_support |
import rietveld |
from scm import SVN |
@@ -59,8 +60,6 @@ FILES_CACHE = {} |
DEFAULT_LINT_REGEX = r"(.*\.cpp|.*\.cc|.*\.h)" |
DEFAULT_LINT_IGNORE_REGEX = r"$^" |
-REVIEWERS_REGEX = r'\s*R=(.+)' |
- |
def CheckHomeForFile(filename): |
"""Checks the users home dir for the existence of the given file. Returns |
the path to the file if it's there, or None if it is not. |
@@ -273,15 +272,12 @@ class ChangeInfo(object): |
def __init__(self, name, issue, patchset, description, files, local_root, |
rietveld_url, needs_upload): |
+ # Defer the description processing to git_cl.ChangeDescription. |
+ self._desc = git_cl.ChangeDescription(description) |
self.name = name |
self.issue = int(issue) |
self.patchset = int(patchset) |
- self._description = None |
- self._reviewers = None |
- self._set_description(description) |
- if files is None: |
- files = [] |
- self._files = files |
+ self._files = files or [] |
self.patch = None |
self._local_root = local_root |
self.needs_upload = needs_upload |
@@ -289,31 +285,19 @@ class ChangeInfo(object): |
rietveld_url or GetCodeReviewSetting('CODE_REVIEW_SERVER')) |
self._rpc_server = None |
- def _get_description(self): |
- return self._description |
- |
- def _set_description(self, description): |
- # TODO(dpranke): Cloned from git_cl.py. These should be shared. |
- if not description: |
- self._description = description |
- return |
+ @property |
+ def description(self): |
+ return self._desc.description |
- parsed_lines = [] |
- reviewers_re = re.compile(REVIEWERS_REGEX) |
- reviewers = '' |
- for l in description.splitlines(): |
- matched_reviewers = reviewers_re.match(l) |
- if matched_reviewers: |
- reviewers = matched_reviewers.group(1).split(',') |
- parsed_lines.append(l) |
- self._reviewers = reviewers |
- self._description = '\n'.join(parsed_lines) |
+ def force_description(self, new_description): |
+ self._desc = git_cl.ChangeDescription(new_description) |
+ self.needs_upload = True |
- description = property(_get_description, _set_description) |
+ def append_footer(self, line): |
+ self._desc.append_footer(line) |
- @property |
- def reviewers(self): |
- return self._reviewers |
+ def get_reviewers(self): |
+ return self._desc.get_reviewers() |
def NeedsUpload(self): |
return self.needs_upload |
@@ -388,10 +372,12 @@ class ChangeInfo(object): |
ctype, body = upload.EncodeMultipartFormData(data, []) |
self.SendToRietveld('/%d/description' % self.issue, payload=body, |
content_type=ctype) |
+ self.needs_upload = False |
- def GetIssueDescription(self): |
- """Returns the issue description from Rietveld.""" |
- return self.SendToRietveld('/%d/description' % self.issue) |
+ def UpdateDescriptionFromIssue(self): |
+ """Updates self.description with the issue description from Rietveld.""" |
+ self._desc = git_cl.ChangeDescription( |
+ self.SendToRietveld('/%d/description' % self.issue)) |
def AddComment(self, comment): |
"""Adds a comment for an issue on Rietveld. |
@@ -851,7 +837,7 @@ def CMDupload(change_info, args): |
upload_arg = ["upload.py", "-y"] |
upload_arg.append("--server=%s" % change_info.rietveld) |
- reviewers = change_info.reviewers or output.reviewers |
+ reviewers = change_info.get_reviewers() or output.reviewers |
if (reviewers and |
not any(arg.startswith('-r') or arg.startswith('--reviewer') for |
arg in args)): |
@@ -1003,17 +989,17 @@ def CMDcommit(change_info, args): |
commit_cmd = ["svn", "commit"] |
if change_info.issue: |
# Get the latest description from Rietveld. |
- change_info.description = change_info.GetIssueDescription() |
+ change_info.UpdateDescriptionFromIssue() |
- commit_message = change_info.description.replace('\r\n', '\n') |
+ commit_desc = git_cl.ChangeDescription(change_info.description) |
if change_info.issue: |
server = change_info.rietveld |
if not server.startswith("http://") and not server.startswith("https://"): |
server = "http://" + server |
- commit_message += ('\nReview URL: %s/%d' % (server, change_info.issue)) |
+ commit_desc.append_footer('Review URL: %s/%d' % (server, change_info.issue)) |
handle, commit_filename = tempfile.mkstemp(text=True) |
- os.write(handle, commit_message) |
+ os.write(handle, commit_desc.description) |
os.close(handle) |
try: |
handle, targets_filename = tempfile.mkstemp(text=True) |
@@ -1039,11 +1025,10 @@ def CMDcommit(change_info, args): |
revision = re.compile(".*?\nCommitted revision (\d+)", |
re.DOTALL).match(output).group(1) |
viewvc_url = GetCodeReviewSetting('VIEW_VC') |
- change_info.description += '\n' |
if viewvc_url and revision: |
- change_info.description += "\nCommitted: " + viewvc_url + revision |
+ change_info.append_footer('Committed: ' + viewvc_url + revision) |
elif revision: |
- change_info.description += "\nCommitted: " + revision |
+ change_info.append_footer('Committed: ' + revision) |
change_info.CloseIssue() |
props = change_info.RpcServer().get_issue_properties( |
change_info.issue, False) |
@@ -1138,8 +1123,7 @@ def CMDchange(args): |
new_description = split_result[0] |
cl_files_text = split_result[1] |
if new_description != description or override_description: |
- change_info.description = new_description |
- change_info.needs_upload = True |
+ change_info.force_description(new_description) |
new_cl_files = [] |
for line in cl_files_text.splitlines(): |
@@ -1168,7 +1152,6 @@ def CMDchange(args): |
# Update the Rietveld issue. |
if change_info.issue and change_info.NeedsUpload(): |
change_info.UpdateRietveldDescription() |
- change_info.needs_upload = False |
change_info.Save() |
return 0 |