diff --git a/gcl.py b/gcl.py index b347a4d0b..d25f9d519 100755 --- a/gcl.py +++ b/gcl.py @@ -715,6 +715,13 @@ def GenerateDiff(files, root=None): else: os.chdir(root) + # 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. + bogus_dir = tempfile.mkdtemp() diff = [] for filename in files: # TODO(maruel): Use SVN.DiffItem(). @@ -722,19 +729,6 @@ def GenerateDiff(files, root=None): # when the file is deleted. if SVN.CaptureInfo(filename).get('Node Kind') == '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) output = RunShell(["svn", "diff", "--config-dir", bogus_dir, filename]) if output: diff.append(output) @@ -745,6 +739,7 @@ def GenerateDiff(files, root=None): else: # The file is not modified anymore. It should be removed from the set. pass + shutil.rmtree(bogus_dir) os.chdir(previous_cwd) return "".join(diff) diff --git a/tests/gcl_unittest.py b/tests/gcl_unittest.py index e9f8dfd39..21b2a4e5d 100755 --- a/tests/gcl_unittest.py +++ b/tests/gcl_unittest.py @@ -41,7 +41,8 @@ class GclUnittest(GclTestsBase): 'OptionallyDoPresubmitChecks', 'PresubmitCL', 'REPOSITORY_ROOT', 'ReadFile', 'RunShell', 'RunShellWithReturnCode', 'SVN', 'SendToRietveld', 'TryChange', 'UnknownFiles', 'UploadCL', 'Warn', - 'WriteFile', 'gclient_utils', 'getpass', 'main', 'os', 'random', 're', + 'WriteFile', + 'breakpad', 'gclient_utils', 'getpass', 'main', 'os', 'random', 're', 'shutil', 'string', 'subprocess', 'sys', 'tempfile', 'upload', 'urllib2', ]