summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Klug <stefan.klug@ideasonboard.com>2024-03-14 11:57:36 +0100
committerStefan Klug <stefan.klug@ideasonboard.com>2024-03-15 14:14:59 +0100
commit62c31a352cc96a079cd65eda800f25a0869781fe (patch)
treebaff1142e7156f4361db9f20b26fc78116109ac6
parent284919ef2e509d8109b84eedcc6d5c2f78cddbef (diff)
checkstyle: Work around bug in difflib
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@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rwxr-xr-xutils/checkstyle.py6
1 files changed, 6 insertions, 0 deletions
diff --git a/utils/checkstyle.py b/utils/checkstyle.py
index db5a550d..84f44a42 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: