From 62c31a352cc96a079cd65eda800f25a0869781fe Mon Sep 17 00:00:00 2001 From: Stefan Klug Date: Thu, 14 Mar 2024 11:57:36 +0100 Subject: 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 Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- utils/checkstyle.py | 6 ++++++ 1 file changed, 6 insertions(+) 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: -- cgit v1.2.1