Code

git grep shows the same hit repeatedly for unmerged paths
authorJunio C Hamano <gitster@pobox.com>
Thu, 6 Dec 2007 00:13:08 +0000 (16:13 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Dec 2007 00:16:40 +0000 (16:16 -0800)
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

index bbf747fc7b66f6b4f19d9dc62a9ba10965199917..f1ff8dc556ce6caa1cafe77be41396dd9b7c9ee6 100644 (file)
@@ -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++;