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
This commit is contained in:
parent
3ec68f047a
commit
6dbf6cde3b
38
tools/svn.py
38
tools/svn.py
@ -12,6 +12,12 @@ import subprocess
|
|||||||
|
|
||||||
PROPERTY_MIMETYPE = 'svn:mime-type'
|
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:
|
class Svn:
|
||||||
|
|
||||||
def __init__(self, directory):
|
def __init__(self, directory):
|
||||||
@ -50,27 +56,33 @@ class Svn:
|
|||||||
"""Return a list of files which are in this directory but NOT under
|
"""Return a list of files which are in this directory but NOT under
|
||||||
SVN control.
|
SVN control.
|
||||||
"""
|
"""
|
||||||
stdout = self._RunCommand(['svn', 'status'])
|
return self.GetFilesWithStatus(STATUS_NOT_UNDER_SVN_CONTROL)
|
||||||
new_regex = re.compile('^\?.....\s+(.+)$', re.MULTILINE)
|
|
||||||
files = new_regex.findall(stdout)
|
|
||||||
return files
|
|
||||||
|
|
||||||
def GetNewAndModifiedFiles(self):
|
def GetNewAndModifiedFiles(self):
|
||||||
"""Return a list of files in this dir which are newly added or modified,
|
"""Return a list of files in this dir which are newly added or modified,
|
||||||
including those that are not (yet) under SVN control.
|
including those that are not (yet) under SVN control.
|
||||||
"""
|
"""
|
||||||
stdout = self._RunCommand(['svn', 'status'])
|
return self.GetFilesWithStatus(
|
||||||
new_regex = re.compile('^[AM\?].....\s+(.+)$', re.MULTILINE)
|
STATUS_ADDED | STATUS_MODIFIED | STATUS_NOT_UNDER_SVN_CONTROL)
|
||||||
files = new_regex.findall(stdout)
|
|
||||||
return files
|
|
||||||
|
|
||||||
def GetModifiedFiles(self):
|
def GetFilesWithStatus(self, status):
|
||||||
"""Return a list of files in this dir which are under SVN control, and
|
"""Return a list of files in this dir with the given SVN status.
|
||||||
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'])
|
stdout = self._RunCommand(['svn', 'status'])
|
||||||
new_regex = re.compile('^M.....\s+(.+)$', re.MULTILINE)
|
status_regex = re.compile(status_regex_string, re.MULTILINE)
|
||||||
files = new_regex.findall(stdout)
|
files = status_regex.findall(stdout)
|
||||||
return files
|
return files
|
||||||
|
|
||||||
def AddFiles(self, filenames):
|
def AddFiles(self, filenames):
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
'''
|
'''
|
||||||
Compares all locally modified images within this SVN checkout against the
|
Generates a visual diff of all pending changes in the local SVN checkout.
|
||||||
SVN base revision of each image.
|
|
||||||
|
|
||||||
Launch with --help to see more information.
|
Launch with --help to see more information.
|
||||||
|
|
||||||
@ -24,8 +23,11 @@ import svn
|
|||||||
USAGE_STRING = 'Usage: %s [options]'
|
USAGE_STRING = 'Usage: %s [options]'
|
||||||
HELP_STRING = '''
|
HELP_STRING = '''
|
||||||
|
|
||||||
Compares all locally modified images within this SVN checkout against the
|
Generates a visual diff of all pending changes in the local SVN checkout.
|
||||||
SVN base revision of each image.
|
|
||||||
|
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))
|
possible_paths, OPTION_PATH_TO_SKDIFF))
|
||||||
|
|
||||||
def SvnDiff(path_to_skdiff, dest_dir):
|
def SvnDiff(path_to_skdiff, dest_dir):
|
||||||
"""Compares all locally modified images within this SVN checkout against
|
"""Generates a visual diff of all pending changes in the local SVN checkout.
|
||||||
the SVN base revision of each image.
|
|
||||||
|
|
||||||
@param path_to_skdiff
|
@param path_to_skdiff
|
||||||
@param dest_dir existing directory within which to write results
|
@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)
|
shutil.rmtree(dir, ignore_errors=True)
|
||||||
os.mkdir(dir)
|
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('.')
|
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:
|
# For each modified file:
|
||||||
# 1. copy its current contents into modified_flattened_dir
|
# 1. copy its current contents into modified_flattened_dir
|
||||||
# 2. copy its original contents into original_flattened_dir
|
# 2. copy its original contents into original_flattened_dir
|
||||||
for modified_file_path in modified_file_paths:
|
for modified_file_path in modified_file_paths:
|
||||||
dest_filename = re.sub(os.sep, '__', modified_file_path)
|
dest_filename = re.sub(os.sep, '__', modified_file_path)
|
||||||
shutil.copyfile(modified_file_path,
|
# If the file had STATUS_DELETED, it won't exist anymore...
|
||||||
os.path.join(modified_flattened_dir, dest_filename))
|
if os.path.isfile(modified_file_path):
|
||||||
|
shutil.copyfile(modified_file_path,
|
||||||
|
os.path.join(modified_flattened_dir, dest_filename))
|
||||||
svn_repo.ExportBaseVersionOfFile(
|
svn_repo.ExportBaseVersionOfFile(
|
||||||
modified_file_path,
|
modified_file_path,
|
||||||
os.path.join(original_flattened_dir, dest_filename))
|
os.path.join(original_flattened_dir, dest_filename))
|
||||||
|
Loading…
Reference in New Issue
Block a user