| Index: presubmit_support.py
|
| diff --git a/presubmit_support.py b/presubmit_support.py
|
| index d4361d4958908a3e5bf21d32758f104d4f2c1f65..094cb192387fb49bc477066e813499f1e6b48442 100755
|
| --- a/presubmit_support.py
|
| +++ b/presubmit_support.py
|
| @@ -36,11 +36,6 @@ import gclient
|
| import presubmit_canned_checks
|
|
|
|
|
| -# Matches key/value (or "tag") lines in changelist descriptions.
|
| -_tag_line_re = re.compile(
|
| - '^\s*(?P<key>[A-Z][A-Z_0-9]*)\s*=\s*(?P<value>.*?)\s*$')
|
| -
|
| -
|
| class NotImplementedException(Exception):
|
| """We're leaving placeholders in a bunch of places to remind us of the
|
| design of the API, but we have not implemented all of it yet. Implement as
|
| @@ -59,7 +54,6 @@ def normpath(path):
|
| return os.path.normpath(path)
|
|
|
|
|
| -
|
| class OutputApi(object):
|
| """This class (more like a module) gets passed to presubmit scripts so that
|
| they can specify various types of results.
|
| @@ -413,36 +407,49 @@ class SvnAffectedFile(AffectedFile):
|
|
|
|
|
| class GclChange(object):
|
| - """A gcl change. See gcl.ChangeInfo for more info."""
|
| + """Describe a change.
|
| +
|
| + Used directly by the presubmit scripts to query the current change being
|
| + tested.
|
| +
|
| + Instance members:
|
| + tags: Dictionnary of KEY=VALUE pairs found in the change description.
|
| + self.KEY: equivalent to tags['KEY']
|
| + """
|
| +
|
| + # Matches key/value (or "tag") lines in changelist descriptions.
|
| + _tag_line_re = re.compile(
|
| + '^\s*(?P<key>[A-Z][A-Z_0-9]*)\s*=\s*(?P<value>.*?)\s*$')
|
|
|
| def __init__(self, change_info, repository_root=''):
|
| - self.name = change_info.name
|
| - self.full_description = change_info.description
|
| - self.repository_root = repository_root
|
| + # Do not keep a reference to the original change_info.
|
| + self._name = change_info.name
|
| + self._full_description = change_info.description
|
| + self._repository_root = repository_root
|
|
|
| # From the description text, build up a dictionary of key/value pairs
|
| # plus the description minus all key/value or "tag" lines.
|
| - self.description_without_tags = []
|
| + self._description_without_tags = []
|
| self.tags = {}
|
| for line in change_info.description.splitlines():
|
| - m = _tag_line_re.match(line)
|
| + m = self._tag_line_re.match(line)
|
| if m:
|
| self.tags[m.group('key')] = m.group('value')
|
| else:
|
| - self.description_without_tags.append(line)
|
| + self._description_without_tags.append(line)
|
|
|
| # Change back to text and remove whitespace at end.
|
| - self.description_without_tags = '\n'.join(self.description_without_tags)
|
| - self.description_without_tags = self.description_without_tags.rstrip()
|
| + self._description_without_tags = '\n'.join(self._description_without_tags)
|
| + self._description_without_tags = self._description_without_tags.rstrip()
|
|
|
| - self.affected_files = [
|
| + self._affected_files = [
|
| SvnAffectedFile(info[1], info[0].strip(), repository_root)
|
| for info in change_info.files
|
| ]
|
|
|
| def Change(self):
|
| """Returns the change name."""
|
| - return self.name
|
| + return self._name
|
|
|
| def DescriptionText(self):
|
| """Returns the user-entered changelist description, minus tags.
|
| @@ -451,15 +458,15 @@ class GclChange(object):
|
| (whitespace permitted before and around) is considered a tag line. Such
|
| lines are stripped out of the description this function returns.
|
| """
|
| - return self.description_without_tags
|
| + return self._description_without_tags
|
|
|
| def FullDescriptionText(self):
|
| """Returns the complete changelist description including tags."""
|
| - return self.full_description
|
| + return self._full_description
|
|
|
| def RepositoryRoot(self):
|
| """Returns the repository root for this change, as an absolute path."""
|
| - return self.repository_root
|
| + return self._repository_root
|
|
|
| def __getattr__(self, attr):
|
| """Return keys directly as attributes on the object.
|
| @@ -480,9 +487,9 @@ class GclChange(object):
|
| [AffectedFile(path, action), AffectedFile(path, action)]
|
| """
|
| if include_dirs:
|
| - affected = self.affected_files
|
| + affected = self._affected_files
|
| else:
|
| - affected = filter(lambda x: not x.IsDirectory(), self.affected_files)
|
| + affected = filter(lambda x: not x.IsDirectory(), self._affected_files)
|
|
|
| if include_deletes:
|
| return affected
|
|
|