Index: third_party/upload.py |
diff --git a/third_party/upload.py b/third_party/upload.py |
index ee2b4c2b4c4432bf84bee80226abc32bc27c2305..cdde7112a5de2c276e2b1b17a043fe0a8b93e376 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) |