[PATCH] checkstyle: Work around bug in difflib

Stefan Klug stefan.klug at ideasonboard.com
Thu Mar 14 11:57:36 CET 2024


If a file misses the newline at the end it gets detected by checkstyle,
but the resulting patch is incorrect and does not apply. It took me a
while to understand that it wasn't me using checkstyle incorrectly, but
that the patch was faulty. The bug itself is in difflib and dates back to
2008.

To reproduce:
- Remove trailing newline from a file
- git add the file
- run ./utils/checkstyle.py -s | patch -p0

Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
---
 utils/checkstyle.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/utils/checkstyle.py b/utils/checkstyle.py
index db5a550d..20a5a592 100755
--- a/utils/checkstyle.py
+++ b/utils/checkstyle.py
@@ -168,6 +168,12 @@ def parse_diff(diff):
             hunk = DiffHunk(line)
 
         elif hunk is not None:
+            # Work around https://github.com/python/cpython/issues/46395
+            # See https://www.gnu.org/software/diffutils/manual/html_node/Incomplete-Lines.html
+            if line[-1] != '\n':
+                hunk.append(line + '\n')
+                line = "\\ No newline at end of file\n"
+
             hunk.append(line)
 
     if hunk:
-- 
2.40.1



More information about the libcamera-devel mailing list