git format-patch produces invalid patch if the commit adds an empty file?
From: Adam Williamson <hidden>
Date: 2021-08-17 18:50:51
Hi folks! So I ran into an odd issue with git today. I'm kinda surprised I can't find any prior discussion of it, but oh well. The situation is this: I ran git format-patch on a commit that adds three empty files to a repository - this commit: https://github.com/mesonbuild/meson/commit/5c87167a34c6ed703444af180fffd8a45a7928ee the relevant lines from the patch file it produced look like this: ===
diff --git a/test cases/common/56 array methods/a.txt b/test cases/common/56 array methods/a.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/test cases/common/56 array methods/b.txt b/test cases/common/56 array methods/b.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/test cases/common/56 array methods/c.txt b/test cases/common/56 array methods/c.txt
new file mode 100644
index 000000000..e69de29bb
=== but `patch` actually chokes on that (when called in an RPM package build): === + /usr/bin/cat /home/adamw/build/meson/0001-interpreter-Fix-list-contains-for-Holders-fixes-9020.patch + /usr/bin/patch -p1 -s --fuzz=0 --no-backup-if-mismatch -f The text leading up to this was: -------------------------- |diff --git a/test cases/common/56 array methods/a.txt b/test cases/common/56 array methods/a.txt |new file mode 100644 |index 000000000..e69de29bb -------------------------- No file to patch. Skipping patch. The text leading up to this was: -------------------------- |diff --git a/test cases/common/56 array methods/b.txt b/test cases/common/56 array methods/b.txt |new file mode 100644 |index 000000000..e69de29bb -------------------------- No file to patch. Skipping patch. The text leading up to this was: -------------------------- |diff --git a/test cases/common/56 array methods/c.txt b/test cases/common/56 array methods/c.txt |new file mode 100644 |index 000000000..e69de29bb -------------------------- No file to patch. Skipping patch. === To make the patch apply cleanly, I had to hand-edit it to add "---" and "+++" lines, like this: ===
diff --git a/test cases/common/56 array methods/a.txt b/test cases/common/56 array methods/a.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/common/56 array methods/a.txt
diff --git a/test cases/common/56 array methods/b.txt b/test cases/common/56 array methods/b.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/common/56 array methods/b.txt
diff --git a/test cases/common/56 array methods/c.txt b/test cases/common/56 array methods/c.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/test cases/common/56 array methods/c.txt
=== This is with git-2.32.0-1.fc35.1.x86_64 in Fedora Rawhide. I'm not subscribed to the list, so please CC me directly on any replies. Thanks! -- Adam Williamson Fedora QA IRC: adamw | Twitter: adamw_ha https://www.happyassassin.net