diff --git a/third_party/upload.py b/third_party/upload.py index ee2b4c2b4..cdde7112a 100755 --- a/third_party/upload.py +++ b/third_party/upload.py @@ -1214,8 +1214,19 @@ class GitVCS(VersionControlSystem): # git config key "diff.external" is used). env = os.environ.copy() if 'GIT_EXTERNAL_DIFF' in env: del env['GIT_EXTERNAL_DIFF'] - return RunShell(["git", "diff", "--no-ext-diff", "--full-index", "-M"] - + extra_args, env=env) + # -M/-C will not print the diff for the deleted file when a file is renamed. + # This is confusing because the original file will not be shown on the + # review when a file is renamed. So first get the diff of all deleted files, + # then the diff of everything except deleted files with rename and copy + # support enabled. + cmd = ["git", "diff", "--no-ext-diff", "--full-index"] + diff = RunShell(cmd + ["--diff-filter=D"] + extra_args, env=env, + silent_ok=True) + diff += RunShell(cmd + ["-C", "--diff-filter=ACMRT"] + extra_args, env=env, + silent_ok=True) + if not diff: + ErrorExit("No output from %s" % (cmd + extra_args)) + return diff def GetUnknownFiles(self): status = RunShell(["git", "ls-files", "--exclude-standard", "--others"], @@ -1871,7 +1882,7 @@ def GuessVCSName(options): if returncode == 0: return (VCS_CVS, None) except OSError, (errno, message): - if error != 2: + if errno != 2: raise return (VCS_UNKNOWN, None)