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

Re: What's cooking in git.git (Nov 2008, #06; Wed, 26)

From
Daniel Barkalow <barkalow@iabervon.org>
Date
Dec 12, 2008, 02:40 UTC
Message-ID
<alpine.LNX.1.00.0812112045120.19665@iabervon.org>
In-Reply-To
<7vy6ym9nm8.fsf@gitster.siamese.dyndns.org>
On Thu, 11 Dec 2008, Junio C Hamano wrote:
Show 31 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> >> That's the point. CE_VALID does not define checkout area while
> >> CE_NO_CHECKOUT does.  If an entry is CE_VALID, it is still in checkout
> >> area. But if it is CE_NO_CHECKOUT, "git grep" should ignore that path.
> >> core.defaultsparse has nothing to do here.
> >
> > My point is that the index cannot tell git grep whether it should search a 
> > path if the path isn't in the index.
> 
> Let's step back a bit.  I think "git grep" that stays silent outside of
> the checkout area when used to grep in the work tree or in the index is a
> mistake.
> 
> The problem "sparse checkout" attempts to address is not this:
> 
>     I ran "git init && git add ." in /usr/src by mistake.  There is no
>     reason for coreutils that is in /usr/src/coreutils and gnucash that is
>     in /usr/src/gnucash to share the same development history nor their
>     should be any ordering between commits in these two independent
>     projects.  I should have done N separate "init & add" independently at
>     one level deeper in the directory hierarchy, but I am too lazy to
>     filter branch the resulting mess now.
> 
> At least, it should not be that, at least to me.
> 
> "Sparse" is "I am not going to modify the files in these areas, and I know
> they do not need to be present for my purposes (e.g. build), so I do not
> need copies in the work tree."  It still works on the whole tree structure
> recorded in the commit, but gives you a way to work inside a sparsely
> populated work tree, iow, without checking everything out.

There's the meta question of: "Do people who have declared that they aren't going to modify or build with some files want their searches to tell them about those files?"

Say I'm the "tr" guy, and I care about the build system, library code, and "tr.c", and I run "make tr"; my sparse checkout doesn't include "head.c", and I totally ignore all the other stuff that's in coreutils. Maybe I want "git grep" to exclude the other stuff.

I don't really have a firm position on whether "git grep" should ignore "head.c" or not, but I think it should be consistent between "git grep" and "git grep origin/next", and I think that, if origin/next has a new "foot.c" that isn't in the current branch to by marked as NO_CHECKOUT, it should be skipped if "tail.c" (which is in my current branch) is skipped.

Show 9 quoted lines
> So "git grep -e frotz Documentation/", whether you only check out
> Documentation or the whole tree, should grep only in Documentation area,
> and "git grep -e frotz" should grep in the whole tree, even if you happen
> to have a sparse checkout.  By definition, a sparse checkout has no
> modifications outside the checkout area, so whenever grep wants to look
> for strings outside the checkout area it should pretend as if the same
> content as what the index records is in the work tree.  This is consistent
> with the way how "git diff" in a sparsely checked out work tree should
> behave.

"git diff" is an ambiguous model for "git grep". It equally describes the behavior of "git diff" to say that it treats files outside the checkout area as matching the index or to say that it never lists files outside the checkout area. On the other hand, there is the question of whether "git diff branch1 branch2" shows differences that are outside the checkout area, and whether "git log" shows commits that only change things outside the checkout area, and "git grep" should match the behavior of these.

	-Daniel
*This .sig left intentionally blank*
Previous: Junio C HamanoNext: Junio C Hamano
Message 28 of 37 in “What's cooking in git.git (Nov 2008, #06; Wed, 26)”
  1. Junio C HamanoNov 27, 2008
  2. Johannes SchindelinNov 27, 2008
  3. Junio C HamanoNov 28, 2008
  4. Johannes SchindelinNov 28, 2008
  5. Shawn O. PearceNov 28, 2008
  6. Junio C HamanoNov 29, 2008
  7. git add --intent-to-add: fix removal of cached emptinessJunio C Hamano, Nov 29, 2008
  8. 1/3 builtin-rm.c: explain and clarify the "local change" logicJunio C Hamano, Nov 29, 2008
  9. 2/3 git add --intent-to-add: fix removal of cached emptinessJunio C Hamano, Nov 29, 2008
  10. Sverre RabbelierNov 29, 2008
  11. Jeff KingNov 30, 2008
  12. 3/3 git add --intent-to-add: do not let an empty blob committed by accidentJunio C Hamano, Nov 29, 2008
  13. Jeff KingNov 30, 2008
  14. Junio C HamanoDec 1, 2008
  15. Daniel BarkalowNov 29, 2008
  16. Nguyen Thai Ngoc DuyNov 29, 2008
  17. Nguyen Thai Ngoc DuyNov 30, 2008
  18. Daniel BarkalowNov 30, 2008
  19. Nguyen Thai Ngoc DuyDec 6, 2008
  20. Daniel BarkalowDec 6, 2008
  21. Nguyen Thai Ngoc DuyDec 7, 2008
  22. Daniel BarkalowDec 7, 2008
  23. Nguyen Thai Ngoc DuyDec 8, 2008
  24. Daniel BarkalowDec 8, 2008
  25. Nguyen Thai Ngoc DuyDec 11, 2008
  26. Daniel BarkalowDec 11, 2008
  27. Junio C HamanoDec 12, 2008
  28. Daniel BarkalowDec 12, 2008
  29. Junio C HamanoDec 12, 2008
  30. Jeff KingDec 12, 2008
  31. Nguyen Thai Ngoc DuyDec 12, 2008
  32. Johannes SixtDec 12, 2008
  33. Nguyen Thai Ngoc DuyDec 12, 2008
  34. Junio C HamanoDec 13, 2008
  35. Junio C HamanoDec 13, 2008
  36. Nguyen Thai Ngoc DuyDec 12, 2008
  37. Junio C HamanoDec 7, 2008

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.