git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: bug?: git grep HEAD with exclude in pathspec not taken into account

From
CBChristophe Bliard <christophe.bliard@trux.info>
Date
Oct 24, 2018, 15:39 UTC
Message-ID
<CAGOLd-5J7+idqoREg0CHNcC0t6Mx3_bC_qbQaLgRLcssO+kxjQ@mail.gmail.com>
In-Reply-To
<CACsJy8C7pArdayQu9Kh5z6dczCqV_=XJP4wzR_dcm_W3MgG+Jg@mail.gmail.com>

In fact, per https://github.com/git/git/commit/859b7f1d0e742493d2a9396794cd9040213ad846, having only a negative pattern is like having a catch-all positive pattern and the negative pattern (since git 2.13.0).

Thus, adding the positive pattern yields the same results:
> git --no-pager grep foo HEAD -- ':!fileA' .
HEAD:fileB:foo is false+
> git --no-pager grep foo HEAD -- ':!fileB' .

HEAD:fileA:foo HEAD:fileB:foo is false+

Le mer. 24 oct. 2018 à 17:14, Duy Nguyen <pclouds@gmail.com> a écrit :
Show 45 quoted lines
>
> On Wed, Oct 24, 2018 at 4:55 PM Christophe Bliard
> <christophe.bliard@trux.info> wrote:
> >
> > Hi,
> >
> > I observed an unexpected behavior while using git grep with both git
> > 2.19.1 and 2.14.3. Here is how to reproduce it:
> >
> > > git init
> > Initialized empty Git repository in /private/tmp/hello/.git/
> > > echo foo > fileA
> > > echo 'foo is false+' > fileB
> > > git add fileA
> > > git commit -m fileA
> > [master (root-commit) f2c83e7] fileA
> >  1 file changed, 1 insertion(+)
> >  create mode 100644 fileA
> > > git add fileB
> > > git commit -m fileB
> > [master e35df26] fileB
> >  1 file changed, 1 insertion(+)
> >  create mode 100644 fileB
> > > git --no-pager grep foo HEAD -- ':!fileA'
> > HEAD:fileB:foo is false+
> > > git --no-pager grep foo HEAD -- ':!fileB'
> > HEAD:fileA:foo
> > HEAD:fileB:foo is false+
> >
> > In the last command, fileB appears in grep results but it should have
> > been excluded.
> >
> > If the HEAD parameter is removed, it works as expected:
>
> It's probably a bug. We have different code paths for matching things
> with or without HEAD, roughly speaking. I'll look into to this more on
> the weekend, unless somebody (is welcome to) beats me first.
>
> Another thing that might also be a problem is, negative patterns are
> supposed to exclude stuff from "something" but you don't specify that
> "something" (i.e. positive patterns) in your grep commands above. If
> "grep foo HEAD -- :/ ':!fileB'" works, then you probably just run into
> some undefined corner case.
> --
> Duy
Previous: Duy NguyenNext: Duy Nguyen
Message 3 of 10 in “Re: bug?: git grep HEAD with exclude in pathspec not taken into account”
  1. Christophe BliardOct 24, 2018
  2. Duy NguyenOct 24, 2018
  3. Christophe BliardOct 24, 2018
  4. Duy NguyenOct 27, 2018
  5. tree-walk.c: fix overoptimistic inclusion in :(exclude) matchingNguyễn Thái Ngọc Duy, Nov 3, 2018
  6. Eric SunshineNov 4, 2018
  7. Eric SunshineNov 4, 2018
  8. Duy NguyenNov 4, 2018
  9. tree-walk.c: fix overoptimistic inclusion in :(exclude) matchingNguyễn Thái Ngọc Duy, Nov 4, 2018
  10. Junio C HamanoNov 5, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.