| Index: trychange.py
|
| diff --git a/trychange.py b/trychange.py
|
| index 65e935a08a9b55c8c3ad62f3b075fa6bd0d03616..cbe49f93f9b2444c4910d5f16fd3d7a8ade20901 100755
|
| --- a/trychange.py
|
| +++ b/trychange.py
|
| @@ -21,11 +21,11 @@ import tempfile
|
| import urllib
|
|
|
| import gcl
|
| -import scm
|
| +import gclient_scm
|
| import presubmit_support
|
| import upload
|
|
|
| -__version__ = '1.1.2'
|
| +__version__ = '1.1.1'
|
|
|
|
|
| # Constants
|
| @@ -150,8 +150,50 @@ class SVN(SCM):
|
| else:
|
| os.chdir(root)
|
|
|
| - # Directories will return None so filter them out.
|
| - diff = filter(None, [scm.SVN.DiffItem(f) for f in files])
|
| + diff = []
|
| + for filename in files:
|
| + # Use svn info output instead of os.path.isdir because the latter fails
|
| + # when the file is deleted.
|
| + if gclient_scm.CaptureSVNInfo(filename).get("Node Kind") in (
|
| + "dir", "directory"):
|
| + continue
|
| + # If the user specified a custom diff command in their svn config file,
|
| + # then it'll be used when we do svn diff, which we don't want to happen
|
| + # since we want the unified diff. Using --diff-cmd=diff doesn't always
|
| + # work, since they can have another diff executable in their path that
|
| + # gives different line endings. So we use a bogus temp directory as the
|
| + # config directory, which gets around these problems.
|
| + if sys.platform.startswith("win"):
|
| + parent_dir = tempfile.gettempdir()
|
| + else:
|
| + parent_dir = sys.path[0] # tempdir is not secure.
|
| + bogus_dir = os.path.join(parent_dir, "temp_svn_config")
|
| + if not os.path.exists(bogus_dir):
|
| + os.mkdir(bogus_dir)
|
| + # Grabs the diff data.
|
| + data = gcl.RunShell(["svn", "diff", "--config-dir", bogus_dir, filename])
|
| +
|
| + # We know the diff will be incorrectly formatted. Fix it.
|
| + if gcl.IsSVNMoved(filename):
|
| + # The file is "new" in the patch sense. Generate a homebrew diff.
|
| + # We can't use ReadFile() since it's not using binary mode.
|
| + file_handle = open(filename, 'rb')
|
| + file_content = file_handle.read()
|
| + file_handle.close()
|
| + # Prepend '+' to every lines.
|
| + file_content = ['+' + i for i in file_content.splitlines(True)]
|
| + nb_lines = len(file_content)
|
| + # We need to use / since patch on unix will fail otherwise.
|
| + filename = filename.replace('\\', '/')
|
| + data = "Index: %s\n" % filename
|
| + data += ("============================================================="
|
| + "======\n")
|
| + # Note: Should we use /dev/null instead?
|
| + data += "--- %s\n" % filename
|
| + data += "+++ %s\n" % filename
|
| + data += "@@ -0,0 +1,%d @@\n" % nb_lines
|
| + data += ''.join(file_content)
|
| + diff.append(data)
|
| os.chdir(previous_cwd)
|
| return "".join(diff)
|
|
|
| @@ -365,7 +407,6 @@ def GuessVCS(options):
|
| Returns:
|
| A SCM instance. Exits if the SCM can't be guessed.
|
| """
|
| - __pychecker__ = 'no-returnvalues'
|
| # Subversion has a .svn in all working directories.
|
| if os.path.isdir('.svn'):
|
| logging.info("Guessed VCS = Subversion")
|
|
|