aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-29 21:28:12 +0000
committerGravatar epoger@google.com <epoger@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-29 21:28:12 +0000
commit6dbf6cde3bb5bd49e74a2a881d816a0572c62ded (patch)
tree2015e1c75049c0455680f8246f683256e72d5a1e /tools
parent3ec68f047a1f698bec12e1a270fdf4f62aed9cdb (diff)
svndiff: report added and deleted files, not just modified files
Review URL: https://codereview.appspot.com/6260052 git-svn-id: http://skia.googlecode.com/svn/trunk@4063 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tools')
-rw-r--r--tools/svn.py38
-rw-r--r--tools/svndiff.py25
2 files changed, 40 insertions, 23 deletions
diff --git a/tools/svn.py b/tools/svn.py
index 5c1fa4102a..b9ef618757 100644
--- a/tools/svn.py
+++ b/tools/svn.py
@@ -12,6 +12,12 @@ import subprocess
PROPERTY_MIMETYPE = 'svn:mime-type'
+# Status types for GetFilesWithStatus()
+STATUS_ADDED = 0x01
+STATUS_DELETED = 0x02
+STATUS_MODIFIED = 0x04
+STATUS_NOT_UNDER_SVN_CONTROL = 0x08
+
class Svn:
def __init__(self, directory):
@@ -50,27 +56,33 @@ class Svn:
"""Return a list of files which are in this directory but NOT under
SVN control.
"""
- stdout = self._RunCommand(['svn', 'status'])
- new_regex = re.compile('^\?.....\s+(.+)$', re.MULTILINE)
- files = new_regex.findall(stdout)
- return files
+ return self.GetFilesWithStatus(STATUS_NOT_UNDER_SVN_CONTROL)
def GetNewAndModifiedFiles(self):
"""Return a list of files in this dir which are newly added or modified,
including those that are not (yet) under SVN control.
"""
- stdout = self._RunCommand(['svn', 'status'])
- new_regex = re.compile('^[AM\?].....\s+(.+)$', re.MULTILINE)
- files = new_regex.findall(stdout)
- return files
+ return self.GetFilesWithStatus(
+ STATUS_ADDED | STATUS_MODIFIED | STATUS_NOT_UNDER_SVN_CONTROL)
+
+ def GetFilesWithStatus(self, status):
+ """Return a list of files in this dir with the given SVN status.
- def GetModifiedFiles(self):
- """Return a list of files in this dir which are under SVN control, and
- have been modified.
+ @param status bitfield combining one or more STATUS_xxx values
"""
+ status_types_string = ''
+ if status & STATUS_ADDED:
+ status_types_string += 'A'
+ if status & STATUS_DELETED:
+ status_types_string += 'D'
+ if status & STATUS_MODIFIED:
+ status_types_string += 'M'
+ if status & STATUS_NOT_UNDER_SVN_CONTROL:
+ status_types_string += '\?'
+ status_regex_string = '^[%s].....\s+(.+)$' % status_types_string
stdout = self._RunCommand(['svn', 'status'])
- new_regex = re.compile('^M.....\s+(.+)$', re.MULTILINE)
- files = new_regex.findall(stdout)
+ status_regex = re.compile(status_regex_string, re.MULTILINE)
+ files = status_regex.findall(stdout)
return files
def AddFiles(self, filenames):
diff --git a/tools/svndiff.py b/tools/svndiff.py
index 23b98dea34..d8beb8d330 100644
--- a/tools/svndiff.py
+++ b/tools/svndiff.py
@@ -1,6 +1,5 @@
'''
-Compares all locally modified images within this SVN checkout against the
-SVN base revision of each image.
+Generates a visual diff of all pending changes in the local SVN checkout.
Launch with --help to see more information.
@@ -24,8 +23,11 @@ import svn
USAGE_STRING = 'Usage: %s [options]'
HELP_STRING = '''
-Compares all locally modified images within this SVN checkout against the
-SVN base revision of each image.
+Generates a visual diff of all pending changes in the local SVN checkout.
+
+This includes a list of all files that have been added, deleted, or modified
+(as far as SVN knows about). For any image modifications, pixel diffs will
+be generated.
'''
@@ -69,8 +71,7 @@ def FindPathToSkDiff(user_set_path=None):
possible_paths, OPTION_PATH_TO_SKDIFF))
def SvnDiff(path_to_skdiff, dest_dir):
- """Compares all locally modified images within this SVN checkout against
- the SVN base revision of each image.
+ """Generates a visual diff of all pending changes in the local SVN checkout.
@param path_to_skdiff
@param dest_dir existing directory within which to write results
@@ -88,17 +89,21 @@ def SvnDiff(path_to_skdiff, dest_dir):
shutil.rmtree(dir, ignore_errors=True)
os.mkdir(dir)
- # Get a list of all locally modified files, descending subdirectories.
+ # Get a list of all locally modified (including added/deleted) files,
+ # descending subdirectories.
svn_repo = svn.Svn('.')
- modified_file_paths = svn_repo.GetModifiedFiles()
+ modified_file_paths = svn_repo.GetFilesWithStatus(
+ svn.STATUS_ADDED | svn.STATUS_DELETED | svn.STATUS_MODIFIED)
# For each modified file:
# 1. copy its current contents into modified_flattened_dir
# 2. copy its original contents into original_flattened_dir
for modified_file_path in modified_file_paths:
dest_filename = re.sub(os.sep, '__', modified_file_path)
- shutil.copyfile(modified_file_path,
- os.path.join(modified_flattened_dir, dest_filename))
+ # If the file had STATUS_DELETED, it won't exist anymore...
+ if os.path.isfile(modified_file_path):
+ shutil.copyfile(modified_file_path,
+ os.path.join(modified_flattened_dir, dest_filename))
svn_repo.ExportBaseVersionOfFile(
modified_file_path,
os.path.join(original_flattened_dir, dest_filename))