threads / patch / 11151

patchgit grep shows the same hit repeatedly for unmerged paths

Subject: [BUG/PATCH] git grep shows the same hit repeatedly for unmerged paths

## tl;dr

5 messages between Dec 6, 2007 and Dec 6, 2007. Diffs are folded; open one to read it.

replies: 4people: 2as markdown or json

Junio C Hamano· Dec 6, 2007, 00:13 UTC · lore
When the index is unmerged, e.g.
	$ git ls-files -u
        100644 faf413748eb6ccb15161a212156c5e348302b1b6 1	setup.c
        100644 145eca50f41d811c4c8fcb21ed2604e6b2971aba 2	setup.c
        100644 cb9558c49b6027bf225ba2a6154c4d2a52bcdbe2 3	setup.c

running "git grep" for work tree files repeats hits for each unmerged stage.

	$ git grep -n -e setup_work_tree -- '*.[ch]'
        setup.c:209:void setup_work_tree(void)
        setup.c:209:void setup_work_tree(void)
        setup.c:209:void setup_work_tree(void)
This should fix it.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin-grep.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)
Show changes to builtin-grep.c +6 −6
diff --git a/builtin-grep.c b/builtin-grep.c
index bbf747f..f1ff8dc 100644
--- a/builtin-grep.c
+++ b/builtin-grep.c
@@ -343,12 +343,12 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
 			memcpy(name + 2, ce->name, len + 1);
 		}
 		argv[argc++] = name;
-		if (argc < MAXARGS)
-			continue;
-		status = flush_grep(opt, argc, nr, argv, &kept);
-		if (0 < status)
-			hit = 1;
-		argc = nr + kept;
+		if (MAXARGS <= argc) {
+			status = flush_grep(opt, argc, nr, argv, &kept);
+			if (0 < status)
+				hit = 1;
+			argc = nr + kept;
+		}
 		if (ce_stage(ce)) {
 			do {
 				i++;
Johannes Sixt· Dec 6, 2007, 07:29 UTC · re: Junio C Hamano · lore

Re: [BUG/PATCH] git grep shows the same hit repeatedly for unmerged paths

Junio C Hamano schrieb:
Show 16 quoted lines
> When the index is unmerged, e.g.
> 
> 	$ git ls-files -u
>         100644 faf413748eb6ccb15161a212156c5e348302b1b6 1	setup.c
>         100644 145eca50f41d811c4c8fcb21ed2604e6b2971aba 2	setup.c
>         100644 cb9558c49b6027bf225ba2a6154c4d2a52bcdbe2 3	setup.c
> 
> running "git grep" for work tree files repeats hits for each unmerged
> stage.
> 
> 	$ git grep -n -e setup_work_tree -- '*.[ch]'
>         setup.c:209:void setup_work_tree(void)
>         setup.c:209:void setup_work_tree(void)
>         setup.c:209:void setup_work_tree(void)
> 
> This should fix it.

Does this change the behavior of grep --cached? IOW, listing the same hit more than once when --cached is given is a feature, IMHO.

-- Hannes
Junio C Hamano· Dec 6, 2007, 08:08 UTC · re: Johannes Sixt · lore

Re: [BUG/PATCH] git grep shows the same hit repeatedly for unmerged paths

Johannes Sixt <j.sixt@viscovery.net> writes:
Show 20 quoted lines
> Junio C Hamano schrieb:
>> When the index is unmerged, e.g.
>> 
>> 	$ git ls-files -u
>>         100644 faf413748eb6ccb15161a212156c5e348302b1b6 1	setup.c
>>         100644 145eca50f41d811c4c8fcb21ed2604e6b2971aba 2	setup.c
>>         100644 cb9558c49b6027bf225ba2a6154c4d2a52bcdbe2 3	setup.c
>> 
>> running "git grep" for work tree files repeats hits for each unmerged
>> stage.
>> 
>> 	$ git grep -n -e setup_work_tree -- '*.[ch]'
>>         setup.c:209:void setup_work_tree(void)
>>         setup.c:209:void setup_work_tree(void)
>>         setup.c:209:void setup_work_tree(void)
>> 
>> This should fix it.
>
> Does this change the behavior of grep --cached? IOW, listing the same hit
> more than once when --cached is given is a feature, IMHO.
Yeah, --cached should grep for each stage.  It doesn't?
Johannes Sixt· Dec 6, 2007, 08:24 UTC · re: Junio C Hamano · lore

Re: [BUG/PATCH] git grep shows the same hit repeatedly for unmerged paths

Junio C Hamano schrieb:
Show 23 quoted lines
> Johannes Sixt <j.sixt@viscovery.net> writes:
> 
>> Junio C Hamano schrieb:
>>> When the index is unmerged, e.g.
>>>
>>> 	$ git ls-files -u
>>>         100644 faf413748eb6ccb15161a212156c5e348302b1b6 1	setup.c
>>>         100644 145eca50f41d811c4c8fcb21ed2604e6b2971aba 2	setup.c
>>>         100644 cb9558c49b6027bf225ba2a6154c4d2a52bcdbe2 3	setup.c
>>>
>>> running "git grep" for work tree files repeats hits for each unmerged
>>> stage.
>>>
>>> 	$ git grep -n -e setup_work_tree -- '*.[ch]'
>>>         setup.c:209:void setup_work_tree(void)
>>>         setup.c:209:void setup_work_tree(void)
>>>         setup.c:209:void setup_work_tree(void)
>>>
>>> This should fix it.
>> Does this change the behavior of grep --cached? IOW, listing the same hit
>> more than once when --cached is given is a feature, IMHO.
> 
> Yeah, --cached should grep for each stage.  It doesn't?
No, it doesn't. Neither before nor after this change. (I actually thought it
 would without this change, but I obviously was wrong.)
-- Hannes
Junio C Hamano· Dec 6, 2007, 08:59 UTC · re: Johannes Sixt · lore

Re: [BUG/PATCH] git grep shows the same hit repeatedly for unmerged paths

Johannes Sixt <j.sixt@viscovery.net> writes:
> No, it doesn't. Neither before nor after this change. (I actually thought it
>  would without this change, but I obviously was wrong.)
Sorry, my mistake.  "git grep" traditionally skips unmerged paths.

It might make sense to grep in stage #2 if a path is unmerged, just like we use stage #2 in diff-files.

← back to recent threads