On Sun, Nov 28, 2021 at 03:26:10PM -0800, Junio C Hamano wrote: > Johannes Altmanninger <aclopte@xxxxxxxxx> writes: > > > diff -I<regex> suppresses hunks where all +/- lines match <regex>. > > it is useful to filter away boilerplate changes. > > > > Unfortunately, it doesn't help if a hunk has a blank line, because the one > > obvious way to filter out blank lines (^$) match *every* line, surprisingly. > > This is because for a line "01\n" > > we have a zero-width match here ^$ (offset 3). > > > > IOW, while we succesfully ignore deleted blank lines > > > > printf '\n' | git diff --no-index - /dev/null -I'^$' > > diff --git a/- b/- > > deleted file mode 100644 > > > > we also ignore non-blank lines (very surprising) > > > > printf 'non-blank-line\n' | git diff --no-index - /dev/null -I'^$' > > diff --git a/- b/- > > deleted file mode 100644 > > > > unless they don't end in a newline (special case) > > > > printf 'line without ending newline' | git diff --no-index - /dev/null -I'^$' > > diff --git a/- b/- > > deleted file mode 100644 > > --- a/- > > +++ /dev/null > > @@ -1 +0,0 @@ > > -line without ending newline > > \ No newline at end of file > > > > This patch fixes the second example. Is this the right direction? > > I do not know where in the code the breakage in the first example > comes from. It sounds like a bug if a pattern is not matched > honoring the anchor, whether the beginning-of-line "^" or the > end-of-line "$" one. THe first example (printf '\n' | ... -I'^$') works fine AFAICT. The regex matches the empty line, so the hunk is ignored (but the file header is still printed). Only the second example (printf 'non-blank-line\n' | ... -I'^$') shows that we ignore too much, because ^$ (incorrectly) matches, but it should only match blank lines. Thanks