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 7, 2008, 21:26 UTC
Message-ID
<alpine.LNX.1.00.0812071455020.19665@iabervon.org>
In-Reply-To
<fcaeb9bf0812070427s64438216s41bf1294aa6398a3@mail.gmail.com>
On Sun, 7 Dec 2008, Nguyen Thai Ngoc Duy wrote:
Show 16 quoted lines
> On 12/7/08, Daniel Barkalow <barkalow@iabervon.org> wrote:
> >  > There is not much work for CE_NO_CHECKOUT on plumbling level except
> >  > some fixes. The last half of the series, for porcelain level, you will
> >  > see more.
> >
> >
> > For the porcelain level, do we need the difference to be in the index? If
> >  the porcelain knows the sparse checkout area and can instruct the plumbing
> >  appropriately, the information shouldn't need to be stored in the index
> 
> This was discussed since the beginning of this feature. I recall that
> the index reflects worktree, and because we mark CE_NO_CHECKOUT on
> file basis, it's best to save the information there, not separately.
> We do save high level information to form the checkout area (sparse
> patterns) in the last half, but basically you should be able to live
> without that.
We need to mark in the index the information that reflects the worktree.

If, however, we take CE_VALID to be the flag for "ignore the worktree entirely at this path; act as it if contains what the index contains" (and use this to cause that aspect of no-checkout), and we then entirely ignore the worktree, including not caring whether there are files there or not (except, of course, that in the transition from caring to not caring for no-checkout, we make the worktree empty, while in the case for "stat-is-expensive", we bring it into agreement with the index), then there is no additional information that needs to be conveyed in the index.

Show 12 quoted lines
> >  unless it's ever important to remember whether an entry is CE_VALID due to
> >  having been outside the checkout when the index was written, even though
> >  the checkout area now includes it. I don't have a good intuition as to
> >  what ought to happen if the user manually changes what's specified for
> >  checkout without actually updating the index and working tree.
> 
> So if a user changes worktree without updating index, they will have
> the same results as they do now: files are shown as modified if they
> don't have CE_NO_CHECKOUT set. If those files do, they are considered
> 'orphaned' or staled and are recommended to be removed/updated to
> avoid unexpected consequences (not availble this this first half
> series because that belongs to "git status").

I was actually thinking that there would be a file for "this is what the user wants to have checked out" (as opposed to the index, which must contain "this is what is checked out"), and the porcelain would instruct the plumbing as to what to do with the worktree (that the plumbing with then ignore, due to the index bit) based on this information.

The index obviously can't contain the user's full instructions for what should be checked out, because the user will want to say "I don't care about anything in Documentation/" and have this apply to Documentation/some-file-not-in-the-index, so that if this file is in the worktree, the user gets a warning.

I think you're doing this with core.defaultsparse, although you seem to allow the index to diverge from this easily.

The question, then, is what happens when the index and core.defaultsparse disagree, either because the porcelain supports causing it or because the user has simply editting the config file or used plumbing to modify the index. That is, (1) we have index entries that say that the worktree is ignored, and the rules don't say they're outside the sparse checkout; do we care whether we expect the worktree to be empty or match the index? And, (2) we have index entries that say we do care about them, but the rules say they're outside the sparse checkout; what happens with these?

Case (1) is where we would need to know, in the index, whether we expect the worktree to actually match the index (traditional CE_VALID) or whether we expect the worktree to be empty (CE_NO_CHECKOUT), if our behavior should actually differ. My vague feeling is that we don't want it to differ, and these paths are unexpectional "interesting to the user, but the worktree is ignored" until reading a tree into the index again. (But note that we will have to check on the worktree when reading into the index if this changes the index from "blobA, CE_VALID" to "blobA, !CE_VALID", since the worktree could differ in a way that we don't want to retain. And I think we want it to be an error to have the worktree be something other than blobA or nothing before, but "nothing" is fine and we just write it out. (This means that users of CE_VALID who remove files behind git's back may lose their removal work; but this is a pretty trivial danger).

	-Daniel
*This .sig left intentionally blank*
Previous: Nguyen Thai Ngoc DuyNext: Nguyen Thai Ngoc Duy
Message 22 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.