Thread (5 messages) flat view 5 messages, 4 authors, 2019-10-02

Re: git-grep in sparse checkout

From: Matheus Tavares Bernardino <hidden>
Date: 2019-10-02 00:06:31

On Tue, Oct 1, 2019 at 3:29 PM Derrick Stolee [off-list ref] wrote:
On 10/1/2019 9:06 AM, Matheus Tavares Bernardino wrote:
quoted
Hi,

During Git Summit it was mentioned that git-grep searches outside
sparsity pattern which is not aligned with user expectation. I took a
quick look at it and it seems the reason is
builtin/grep.c:grep_cache() (which also greps worktree) will grep the
object store when a given index entry has the CE_SKIP_WORKTREE bit
turned on.

From what I understand, this bit is used exactly for sparse checkouts
(as described in Documentation/technical/index-format.txt[1]). But
should we perhaps ignore it in git-grep to have the expected behavior?
I'll be happy to send the patch if so, but I wanted to check with you
first.
Is that the expected behavior? In a sparse-checkout, wouldn't you _want_
Git to report things outside the cone? You can already use external tools
to search for things in the sparse cone: they are on disk. You need "git
grep" for the objects reachable from the current tree but not already
on disk.
Hmm, we can use external tools to search in the sparse cone, but even
in this circumstance, I think we need git-grep for some usecases.
git-grep on disk can exclude files not being tracked and access other
git functionalities such as --textconv to read .gitattributes and
convert the files before grepping. So maybe people would want to grep
just the cone but also have these other options that would be
unavailable through external tools?

(Users could already simulate such behavior giving the sparse clone
patterns as pathspecs to git-grep, but that can get complicated for
more complex sparse patterns.)
I respect the goal to minimize the work "git grep" is doing, especially
in a sparse-checkout + partial-clone world, where we wouldn't expect to
have the blobs locally and this search would cause many blob downloads.
I just want to truly examine if this is the right behavior.

At minimum, I would expect a new option to have "git grep" go back to
the old behavior, so users who really want a tree-wide search can have
one.
Yes, I totally agree that this behavior change should come with such
an option. Maybe --ignore-sparsity-patterns, as Elijah suggested.
Thanks,
-Stolee
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help