git-grep: fix exit code when we use external grep.
[gitweb.git] / builtin-grep.c
index 2e7986cecefc964f665b10d363569951c1f40293..bc53546dc713f425e1d35fd3716265a0bdf01702 100644 (file)
@@ -446,7 +446,7 @@ static int exec_grep(int argc, const char **argv)
 
 static int external_grep(struct grep_opt *opt, const char **paths, int cached)
 {
-       int i, nr, argc, hit, len;
+       int i, nr, argc, hit, len, status;
        const char *argv[MAXARGS+1];
        char randarg[ARGBUF];
        char *argptr = randarg;
@@ -536,12 +536,17 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached)
                argv[argc++] = name;
                if (argc < MAXARGS)
                        continue;
-               hit += exec_grep(argc, argv);
+               status = exec_grep(argc, argv);
+               if (0 < status)
+                       hit = 1;
                argc = nr;
        }
-       if (argc > nr)
-               hit += exec_grep(argc, argv);
-       return 0;
+       if (argc > nr) {
+               status = exec_grep(argc, argv);
+               if (0 < status)
+                       hit = 1;
+       }
+       return hit;
 }
 
 static int grep_cache(struct grep_opt *opt, const char **paths, int cached)
@@ -817,8 +822,12 @@ int cmd_grep(int argc, const char **argv, char **envp)
                        }
                        usage(builtin_grep_usage);
                }
-               if (!strcmp("--", arg))
+               if (!strcmp("--", arg)) {
+                       /* later processing wants to have this at argv[1] */
+                       argv--;
+                       argc++;
                        break;
+               }
                if (*arg == '-')
                        usage(builtin_grep_usage);