From: "Santi Béjar" <santi@agolina.net>
To: "Nguyen Thai Ngoc Duy" <pclouds@gmail.com>
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Jakub Narebski" <jnareb@gmail.com>,
git@vger.kernel.org
Subject: Re: [PATCH v2 00/14] Sparse checkout
Date: Tue, 23 Sep 2008 13:06:47 +0200 [thread overview]
Message-ID: <adf1fd3d0809230406r598f6d1l41cd860568de761f@mail.gmail.com> (raw)
In-Reply-To: <fcaeb9bf0809210311x7e9337fbmd978e95aa7998525@mail.gmail.com>
On Sun, Sep 21, 2008 at 12:11 PM, Nguyen Thai Ngoc Duy
<pclouds@gmail.com> wrote:
> On 9/21/08, Junio C Hamano <gitster@pobox.com> wrote:
>> "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.
>
>> 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.
While I agree that the checkout attr looks like an attribute (so
reusing attr.c is a good idea) and $GIT_DIR/info/gitattributes seems a
good place to specify them, I think it will be better in the config
$GIT_DIR/config. There it is clear that it is a local thing and you
have "git config" to read and write them. Additionally you could have
different patterns in the config (sparse.default, sparse.doc,
sparse.src,...), although maybe it is not very useful.
I think the main UI to sparse checkout should be a default sparse
pattern that is used for "all" commands, like merge, reset, and
checkout. Now it is too easy to escape from the sparse checkout, when
you merge or checkout a branch with new files, when doing a "git reset
--hard" (when you abort a failed merge), or when doing a diff
(specially when you pull).
Santi
next prev parent reply other threads:[~2008-09-23 11:08 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-20 10:01 [PATCH v2 00/14] Sparse checkout Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 01/14] Extend index to save more flags Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 02/14] Introduce CE_NO_CHECKOUT bit Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 03/14] ls-files: add options to support sparse checkout Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 04/14] update-index: refactor mark_valid() in preparation for new options Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 05/14] update-index: add --checkout/--no-checkout to update CE_NO_CHECKOUT bit Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 06/14] ls-files: Add tests for --sparse and friends Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 07/14] Prevent diff machinery from examining worktree outside sparse checkout Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 08/14] checkout_entry(): CE_NO_CHECKOUT on checked out entries Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 09/14] grep: skip files outside sparse checkout area Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 10/14] ls-files: support "sparse patterns", used to form sparse checkout areas Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 11/14] unpack_trees(): add support for sparse checkout Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 12/14] clone: support sparse checkout with --narrow-path option Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 13/14] checkout: add new options to support sparse checkout Nguyễn Thái Ngọc Duy
2008-09-20 10:01 ` [PATCH 14/14] wt-status: Show orphaned entries in "git status" output Nguyễn Thái Ngọc Duy
2008-09-20 21:59 ` [PATCH 01/14] Extend index to save more flags Jakub Narebski
2008-09-20 22:23 ` Junio C Hamano
2008-09-20 22:26 ` Junio C Hamano
2008-09-21 4:34 ` Nguyen Thai Ngoc Duy
2008-09-21 22:21 ` Jakub Narebski
2008-09-20 10:48 ` [PATCH v2 00/14] Sparse checkout Santi Béjar
2008-09-20 12:07 ` Nguyen Thai Ngoc Duy
2008-09-20 16:45 ` Jakub Narebski
2008-09-20 17:33 ` Nguyen Thai Ngoc Duy
2008-09-20 18:01 ` Jakub Narebski
2008-09-20 18:40 ` Encoding problems with format-patch [Was: [PATCH v2 00/14] Sparse checkout] Uwe Kleine-König
2008-09-20 19:48 ` [PATCH v2 00/14] Sparse checkout Nguyen Thai Ngoc Duy
2008-09-20 22:11 ` Junio C Hamano
2008-09-21 10:11 ` Nguyen Thai Ngoc Duy
2008-09-21 10:49 ` Jakub Narebski
2008-09-21 11:32 ` Nguyen Thai Ngoc Duy
2008-09-21 22:14 ` Jakub Narebski
2008-09-23 11:06 ` Santi Béjar [this message]
2008-09-23 11:56 ` Nguyen Thai Ngoc Duy
2008-09-26 16:00 ` Nguyen Thai Ngoc Duy
2008-09-20 18:52 ` Junio C Hamano
2008-09-23 11:57 ` Santi Béjar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=adf1fd3d0809230406r598f6d1l41cd860568de761f@mail.gmail.com \
--to=santi@agolina.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jnareb@gmail.com \
--cc=pclouds@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).