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

Re: [PATCH v2 00/14] Sparse checkout

From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Date
Sep 21, 2008, 10:11 UTC
Message-ID
<fcaeb9bf0809210311x7e9337fbmd978e95aa7998525@mail.gmail.com>
In-Reply-To
<7vzlm21n83.fsf@gitster.siamese.dyndns.org>
On 9/21/08, Junio C Hamano <gitster@pobox.com> wrote:
Show 40 quoted lines
> "Nguyen Thai Ngoc Duy" <pclouds@gmail.com> writes:
>
>  > On 9/21/08, Jakub Narebski <jnareb@gmail.com> wrote:
>
> > ...
>
> >>  >>  BTW I think that the same rules are used in gitattributes, aren't
>  >>  >>  they?
>  >>  >
>  >>  > They have different implementations. Though the rules may be the same.
>  >>
>  >> Were you able to reuse either one?
>  >
>  > No. .gitignore is tied to read_directory() while .gitattributes has
>  > attributes attached. So I rolled out another one for index.
>
>
> I am sorry, but that sounds like a rather lame excuse.  It certainly is
>  possible to introduce an "ignored" attribute and have .gitattributes file
>  specify that, instead of having an entry in .gitignore file, if you teach
>  read_directory() to pay attention to the attributes mechanism.  If we had
>  from day one that a more generic gitattributes mechanism, I would imagine
>  we wouldn't even had a separate .gitignore codepath but used the attribute
>  mechanism throughout the system.
>
>  Now I do not think we are ever going to deprecate gitignore and move
>  everybody to "ignored" attributes, because such a transition would not buy
>  the end users anything, but it technically is possible and would have been
>  the right thing to do, if we were building the system from scratch.  We
>  still could add it as an optional feature (i.e. if a path has the
>  attribute that says "ignored" or "not ignored", then that determines the
>  fate of the path, otherwise we look at gitignore).
>
>  I wouldn't be surprised if an alternative implementation of your code to
>  assign "sparseness" to each path internally used "to-be-checked-out"
>  attribute, and used that attribute to control how ls-files filters its
>  output.
>
>  A better excuse might have been that "I am not reading these patterns from
>  anywhere but command line", but that got me thinking further.

That "from command line" piece makes a bit of difference. For example patterns separated by colons and backslash escape, but that does not stop it from reusing attr.c.

>  How would that --narrow-match that is not stored anywhere on the
>  filesystem but used only for filtering the output be any more useful than
>  a grep that filters ls-files output in practice?
Well, it works exactly like 'grep' internally.
Show 26 quoted lines
>  I would imagine it would be much more useful if .git/info/attributes can
>  specify "checkout" attribute that is defined like this:
>
>         `checkout`
>         ^^^^^^^^^^
>
>         This attribute controls if the path can be left not checked-out to the
>         working tree.
>
>         Unset::
>                 Unsetting the `checkout` marks the path not to be checked out.
>
>         Unspecified::
>                 A path which does not have any `checkout` attribute specified is
>                 handled in no special way.
>
>         Any value set to `checkout` is ignored, and git acts as if the
>         attribute is left unspecified.
>
>  Then whenever a new path enters the index, you _could_ check with the
>  attribute mechanism to set the CE_NOCHECKOUT flag.  Just like an already
>  tracked path is not ignored even if it matches .gitignore pattern, a path
>  without CE_NOCHECKOUT that is in the index is checked out even if it has
>  checkout attribute Unset.
>
>  Hmm?

Well I think people would want to save no-checkout rules eventually. But I don't know how they want to use it. Will the saved rules be hard restriction, that no files can be checked out outside defined areas? Will it be to save a couple of keystrokes, that is, instead of typing "--reset-sparse=blah" all the time, now just "--reset-sparse" and default rules will be applied? Your suggestion would be the third, applying on new files only.

Anyway I will try to extend attr.c a bit to take input from command line, then move "sparse patterns" over to use attr.c.

-- 
Duy
Previous: Junio C HamanoNext: Jakub Narebski
Message 29 of 37 in “Sparse checkout”
  1. 00/14 Sparse checkoutNguyễn Thái Ngọc Duy, Sep 20, 2008
  2. 01/14 Extend index to save more flagsNguyễn Thái Ngọc Duy, Sep 20, 2008
  3. 02/14 Introduce CE_NO_CHECKOUT bitNguyễn Thái Ngọc Duy, Sep 20, 2008
  4. 03/14 ls-files: add options to support sparse checkoutNguyễn Thái Ngọc Duy, Sep 20, 2008
  5. 04/14 update-index: refactor mark_valid() in preparation for new optionsNguyễn Thái Ngọc Duy, Sep 20, 2008
  6. 05/14 update-index: add --checkout/--no-checkout to update CE_NO_CHECKOUT bitNguyễn Thái Ngọc Duy, Sep 20, 2008
  7. 06/14 ls-files: Add tests for --sparse and friendsNguyễn Thái Ngọc Duy, Sep 20, 2008
  8. 07/14 Prevent diff machinery from examining worktree outside sparse checkoutNguyễn Thái Ngọc Duy, Sep 20, 2008
  9. 08/14 checkout_entry(): CE_NO_CHECKOUT on checked out entries.Nguyễn Thái Ngọc Duy, Sep 20, 2008
  10. 09/14 grep: skip files outside sparse checkout areaNguyễn Thái Ngọc Duy, Sep 20, 2008
  11. 10/14 ls-files: support "sparse patterns", used to form sparse checkout areasNguyễn Thái Ngọc Duy, Sep 20, 2008
  12. 11/14 unpack_trees(): add support for sparse checkoutNguyễn Thái Ngọc Duy, Sep 20, 2008
  13. 12/14 clone: support sparse checkout with --narrow-path optionNguyễn Thái Ngọc Duy, Sep 20, 2008
  14. 13/14 checkout: add new options to support sparse checkoutNguyễn Thái Ngọc Duy, Sep 20, 2008
  15. 14/14 wt-status: Show orphaned entries in "git status" outputNguyễn Thái Ngọc Duy, Sep 20, 2008
  16. Jakub NarebskiSep 20, 2008
  17. Junio C HamanoSep 20, 2008
  18. Junio C HamanoSep 20, 2008
  19. Nguyen Thai Ngoc DuySep 21, 2008
  20. Jakub NarebskiSep 21, 2008
  21. Santi BéjarSep 20, 2008
  22. Nguyen Thai Ngoc DuySep 20, 2008
  23. Jakub NarebskiSep 20, 2008
  24. Nguyen Thai Ngoc DuySep 20, 2008
  25. Jakub NarebskiSep 20, 2008
  26. Uwe Kleine-KönigSep 20, 2008
  27. Nguyen Thai Ngoc DuySep 20, 2008
  28. Junio C HamanoSep 20, 2008
  29. Nguyen Thai Ngoc DuySep 21, 2008
  30. Jakub NarebskiSep 21, 2008
  31. Nguyen Thai Ngoc DuySep 21, 2008
  32. Jakub NarebskiSep 21, 2008
  33. Santi BéjarSep 23, 2008
  34. Nguyen Thai Ngoc DuySep 23, 2008
  35. Nguyen Thai Ngoc DuySep 26, 2008
  36. Junio C HamanoSep 20, 2008
  37. Santi BéjarSep 23, 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.