| 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
|
|
|