Subject: [PATCH] git-p4: ignore binary file diffs in git-p4 commit

From: "Berislav Lopac via GitGitGadget" <[email-masked]>
Date: Tue, 22 Sep 2020 08:31:36 +0000

From: Berislav Lopac <[email-masked]>

Currently, when submitting commits, `git p4 submit` helpfully builds a
diff of changes, and then displays them in a text editor before
continuing (mimicking standard git commit behaviour). For changed files
it asks p4 for the diff, but if a file is added it dumps all of its
lines; to do so it opens a file, but as a text -- which obviously fails
if a file is binary, raising `UnicodeDecodeError`.
Signed-off-by: Berislav Lopac <[email-masked]>
---
    ignore binary file diffs in git-p4 commit
    
    Currently, when submitting commits, git p4 submit helpfully builds a
    diff of changes, and then displays them in a text editor before
    continuing (mimicking standard git commit behaviour). For changed files
    it asks git for the diff, but if a file is added it dumps all of its
    lines; to do so it opens a file, but as a text -- which obviously fails
    if a file is binary, raising UnicodeDecodeError.
    
    This simple patch catches that exception and stops building the diff, so
    only the name of the added file is included.

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-833%2Fberislavlopac%2Fignore-binary-file-diffs-in-git-p4-commit-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-833/berislavlopac/ignore-binary-file-diffs-in-git-p4-commit-v1
Pull-Request: https://github.com/git/git/pull/833

 git-p4.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/git-p4.py b/git-p4.py
index 9a71a6690d..3d72a0dbdb 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -1847,9 +1847,13 @@ def get_diff_description(self, editedFiles, filesToAdd, symlinks):
                 newdiff += "+%s\n" % os.readlink(newFile)
             else:
                 f = open(newFile, "r")
-                for line in f.readlines():
-                    newdiff += "+" + line
-                f.close()
+                try:
+                    for line in f.readlines():
+                        newdiff += "+" + line
+                except UnicodeDecodeError:
+                    pass
+                finally:
+                    f.close()
 
         return (diff + newdiff).replace('\r\n', '\n')

base-commit: af6b65d45ef179ed52087e80cb089f6b2349f4ec
-- 
gitgitgadget