| Index: presubmit_support.py
|
| diff --git a/presubmit_support.py b/presubmit_support.py
|
| index 42df164c6a741138412e971863c1eaf1d55f5094..6cbdfed14d43d8323d679ca3a6c27206da253565 100755
|
| --- a/presubmit_support.py
|
| +++ b/presubmit_support.py
|
| @@ -316,12 +316,11 @@ class AffectedFile(object):
|
| """Representation of a file in a change."""
|
|
|
| def __init__(self, path, action, repository_root=''):
|
| - self.path = path
|
| - self.action = action
|
| - self.repository_root = repository_root
|
| - self.server_path = None
|
| - self.is_directory = None
|
| - self.properties = {}
|
| + self._path = path
|
| + self._action = action
|
| + self._repository_root = repository_root
|
| + self._is_directory = None
|
| + self._properties = {}
|
|
|
| def ServerPath(self):
|
| """Returns a path string that identifies the file in the SCM system.
|
| @@ -333,32 +332,32 @@ class AffectedFile(object):
|
| def LocalPath(self):
|
| """Returns the path of this file on the local disk relative to client root.
|
| """
|
| - return normpath(self.path)
|
| + return normpath(self._path)
|
|
|
| def AbsoluteLocalPath(self):
|
| """Returns the absolute path of this file on the local disk.
|
| """
|
| - return normpath(os.path.join(self.repository_root, self.LocalPath()))
|
| + return normpath(os.path.join(self._repository_root, self.LocalPath()))
|
|
|
| def IsDirectory(self):
|
| """Returns true if this object is a directory."""
|
| - path = self.AbsoluteLocalPath()
|
| - if self.is_directory is None:
|
| - self.is_directory = (os.path.exists(path) and
|
| - os.path.isdir(path))
|
| - return self.is_directory
|
| + if self._is_directory is None:
|
| + path = self.AbsoluteLocalPath()
|
| + self._is_directory = (os.path.exists(path) and
|
| + os.path.isdir(path))
|
| + return self._is_directory
|
|
|
| def Action(self):
|
| """Returns the action on this opened file, e.g. A, M, D, etc."""
|
| # TODO(maruel): Somewhat crappy, Could be "A" or "A +" for svn but
|
| # different for other SCM.
|
| - return self.action
|
| + return self._action
|
|
|
| def Property(self, property_name):
|
| """Returns the specified SCM property of this file, or None if no such
|
| property.
|
| """
|
| - return self.properties.get(property_name, None)
|
| + return self._properties.get(property_name, None)
|
|
|
| def IsTextFile(self):
|
| """Returns True if the file is a text file and not a binary file."""
|
| @@ -397,38 +396,47 @@ class AffectedFile(object):
|
| class SvnAffectedFile(AffectedFile):
|
| """Representation of a file in a change out of a Subversion checkout."""
|
|
|
| + def __init__(self, *args, **kwargs):
|
| + AffectedFile.__init__(self, *args, **kwargs)
|
| + self._server_path = None
|
| + self._is_text_file = None
|
| +
|
| def ServerPath(self):
|
| - if self.server_path is None:
|
| - self.server_path = gclient.CaptureSVNInfo(
|
| + if self._server_path is None:
|
| + self._server_path = gclient.CaptureSVNInfo(
|
| self.AbsoluteLocalPath()).get('URL', '')
|
| - return self.server_path
|
| + return self._server_path
|
|
|
| def IsDirectory(self):
|
| - path = self.AbsoluteLocalPath()
|
| - if self.is_directory is None:
|
| + if self._is_directory is None:
|
| + path = self.AbsoluteLocalPath()
|
| if os.path.exists(path):
|
| # Retrieve directly from the file system; it is much faster than
|
| # querying subversion, especially on Windows.
|
| - self.is_directory = os.path.isdir(path)
|
| + self._is_directory = os.path.isdir(path)
|
| else:
|
| - self.is_directory = gclient.CaptureSVNInfo(
|
| + self._is_directory = gclient.CaptureSVNInfo(
|
| path).get('Node Kind') in ('dir', 'directory')
|
| - return self.is_directory
|
| + return self._is_directory
|
|
|
| def Property(self, property_name):
|
| - if not property_name in self.properties:
|
| - self.properties[property_name] = gcl.GetSVNFileProperty(
|
| + if not property_name in self._properties:
|
| + self._properties[property_name] = gcl.GetSVNFileProperty(
|
| self.AbsoluteLocalPath(), property_name)
|
| - return self.properties[property_name]
|
| + return self._properties[property_name]
|
|
|
| def IsTextFile(self):
|
| - if self.Action() == 'D':
|
| - return False
|
| - mime_type = gcl.GetSVNFileProperty(self.AbsoluteLocalPath(),
|
| - 'svn:mime-type')
|
| - if not mime_type or mime_type.startswith('text/'):
|
| - return True
|
| - return False
|
| + if self._is_text_file is None:
|
| + if self.Action() == 'D':
|
| + # A deleted file is not a text file.
|
| + self._is_text_file = False
|
| + elif self.IsDirectory():
|
| + self._is_text_file = False
|
| + else:
|
| + mime_type = gcl.GetSVNFileProperty(self.AbsoluteLocalPath(),
|
| + 'svn:mime-type')
|
| + self._is_text_file = (not mime_type or mime_type.startswith('text/'))
|
| + return self._is_text_file
|
|
|
|
|
| class GclChange(object):
|
|
|