[PATCH] checkstyle: Work around bug in difflib
Stefan Klug
stefan.klug at ideasonboard.com
Thu Mar 14 13:50:06 CET 2024
Hi Kieran,
thanks for the review.
On Thu, Mar 14, 2024 at 12:19:18PM +0000, Kieran Bingham wrote:
> Quoting Stefan Klug (2024-03-14 10:57:36)
> > 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.
>
> Open source speeds!
>
> > 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"
>
> This looks reasonable, but at a glance I can't tell if the \\ is an
> escaped \ or a double \\ ?
Yes, it's an escaped backslash.
Cheers
Stefan
>
> Based on the text at
> https://www.gnu.org/software/diffutils/manual/html_node/Incomplete-Lines.html
>
> ```
> For example, suppose F and G are one-byte files that contain just ‘f’
> and ‘g’, respectively. Then ‘diff F G’ outputs
>
> 1c1
> < f
> \ No newline at end of file
> ---
> > g
> \ No newline at end of file
> ```
> I assume it's an escape, and only a single line is printed, and based on
> that assumption:
>
>
> Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> > +
> > hunk.append(line)
> >
> > if hunk:
> > --
> > 2.40.1
> >
More information about the libcamera-devel
mailing list