Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Unified Diff: gcl.py

Issue 6719004: refactor parsing of change descriptions, fix TBR= (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: rebase to head, fix bugs Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | gclient_utils.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gcl.py
diff --git a/gcl.py b/gcl.py
index 76a217c442c46ab97ac2bfe7dd086c0fa5abff1f..e7fa919954e37dd5deca5393f6b6a284792e0a3a 100755
--- a/gcl.py
+++ b/gcl.py
@@ -290,9 +290,7 @@ class ChangeInfo(object):
self.name = name
self.issue = int(issue)
self.patchset = int(patchset)
- self._description = None
- self._subject = None
- self._reviewers = None
+ self._change_desc = None
self._set_description(description)
if files is None:
files = []
@@ -306,42 +304,21 @@ class ChangeInfo(object):
self.rietveld = GetCodeReviewSetting('CODE_REVIEW_SERVER')
def _get_description(self):
- return self._description
+ return self._change_desc.description
def _set_description(self, description):
- # TODO(dpranke): Cloned from git_cl.py. These should be shared.
- if not description:
- self._description = description
- return
-
- parsed_lines = []
- reviewers_re = re.compile(REVIEWERS_REGEX)
- reviewers = ''
- subject = ''
- for l in description.splitlines():
- if not subject:
- subject = l
- matched_reviewers = reviewers_re.match(l)
- if matched_reviewers:
- reviewers = matched_reviewers.group(1).split(',')
- parsed_lines.append(l)
-
- if len(subject) > 100:
- subject = subject[:97] + '...'
-
- self._subject = subject
- self._reviewers = reviewers
- self._description = '\n'.join(parsed_lines)
+ self._change_desc = presubmit_support.ChangeDescription(
+ description=description)
description = property(_get_description, _set_description)
@property
def reviewers(self):
- return self._reviewers
+ return self._change_desc.reviewers
@property
def subject(self):
- return self._subject
+ return self._change_desc.subject
def NeedsUpload(self):
return self.needs_upload
@@ -378,7 +355,7 @@ class ChangeInfo(object):
'patchset': self.patchset,
'needs_upload': self.NeedsUpload(),
'files': self.GetFiles(),
- 'description': self.description,
+ 'description': self._change_desc.description,
'rietveld': self.rietveld,
}, sort_keys=True, indent=2)
gclient_utils.FileWrite(GetChangelistInfoFile(self.name), data)
@@ -739,20 +716,6 @@ def ListFiles(show_unknown_files):
return 0
-def GetEditor():
- editor = os.environ.get("SVN_EDITOR")
- if not editor:
- editor = os.environ.get("EDITOR")
-
- if not editor:
- if sys.platform.startswith("win"):
- editor = "notepad"
- else:
- editor = "vi"
-
- return editor
-
-
def GenerateDiff(files, root=None):
return SVN.GenerateDiff(files, root=root)
@@ -1093,38 +1056,34 @@ def CMDchange(args):
unaffected_files = [x for x in other_files if not file_re.match(x[0])]
description = description.rstrip() + '\n'
+ reviewers = change_info.reviewers
separator1 = ("\n---All lines above this line become the description.\n"
"---Repository Root: " + change_info.GetLocalRoot() + "\n"
"---Paths in this changelist (" + change_info.name + "):\n")
separator2 = "\n\n---Paths modified but not in any changelist:\n\n"
- text = (description + separator1 + '\n' +
- '\n'.join([f[0] + f[1] for f in change_info.GetFiles()]))
+
+ footer = (separator1 + '\n' +
+ '\n'.join([f[0] + f[1] for f in change_info.GetFiles()]))
if change_info.Exists():
- text += (separator2 +
- '\n'.join([f[0] + f[1] for f in affected_files]) + '\n')
+ footer += (separator2 +
+ '\n'.join([f[0] + f[1] for f in affected_files]) + '\n')
else:
- text += ('\n'.join([f[0] + f[1] for f in affected_files]) + '\n' +
- separator2)
- text += '\n'.join([f[0] + f[1] for f in unaffected_files]) + '\n'
+ footer += ('\n'.join([f[0] + f[1] for f in affected_files]) + '\n' +
+ separator2)
+ footer += '\n'.join([f[0] + f[1] for f in unaffected_files]) + '\n'
- handle, filename = tempfile.mkstemp(text=True)
- os.write(handle, text)
- os.close(handle)
+ change_desc = presubmit_support.ChangeDescription(description=description,
+ reviewers=reviewers)
- # Open up the default editor in the system to get the CL description.
- try:
- if not silent:
- cmd = '%s %s' % (GetEditor(), filename)
- if sys.platform == 'win32' and os.environ.get('TERM') == 'msys':
- # Msysgit requires the usage of 'env' to be present.
- cmd = 'env ' + cmd
- # shell=True to allow the shell to handle all forms of quotes in $EDITOR.
- subprocess.check_call(cmd, shell=True)
- result = gclient_utils.FileRead(filename, 'r')
- finally:
- os.remove(filename)
+ # These next few lines are equivalent to change_desc.UserUpdate(). We
+ # call them individually to avoid passing a lot of state back and forth.
+ original_description = change_desc.description
+
+ result = change_desc.EditableDescription() + footer
+ if not silent:
+ result = change_desc.editor(result)
if not result:
return 0
@@ -1136,8 +1095,8 @@ def CMDchange(args):
# Update the CL description if it has changed.
new_description = split_result[0]
cl_files_text = split_result[1]
- if new_description != description or override_description:
- change_info.description = new_description
+ change_desc.Parse(new_description)
+ if change_desc.description != original_description or override_description:
change_info.needs_upload = True
new_cl_files = []
@@ -1151,7 +1110,7 @@ def CMDchange(args):
new_cl_files.append((status, filename))
if (not len(change_info.GetFiles()) and not change_info.issue and
- not len(new_description) and not new_cl_files):
+ not len(change_desc.description) and not new_cl_files):
ErrorExit("Empty changelist not saved")
change_info._files = new_cl_files
« no previous file with comments | « no previous file | gclient_utils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698