X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=builtin-grep.c;h=6973c66704326804def00a22bfdcdb487dcad4c2;hb=088b084bbbb7c076a85db941ad60edce582017b4;hp=acc4eea36397754d317e131f999b7b77dad31e36;hpb=16a4c6ee0d9a3d07d4d0afbbc4e3467e78065eca;p=git.git diff --git a/builtin-grep.c b/builtin-grep.c index acc4eea36..6973c6670 100644 --- a/builtin-grep.c +++ b/builtin-grep.c @@ -29,10 +29,11 @@ static int pathspec_matches(const char **paths, const char *name) int matchlen = strlen(match); const char *cp, *meta; - if ((matchlen <= namelen) && - !strncmp(name, match, matchlen) && - (match[matchlen-1] == '/' || - name[matchlen] == '\0' || name[matchlen] == '/')) + if (!matchlen || + ((matchlen <= namelen) && + !strncmp(name, match, matchlen) && + (match[matchlen-1] == '/' || + name[matchlen] == '\0' || name[matchlen] == '/'))) return 1; if (!fnmatch(match, name, 0)) return 1; @@ -445,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; @@ -459,6 +460,8 @@ static int external_grep(struct grep_opt *opt, const char **paths, int cached) push_arg("-n"); if (opt->regflags & REG_EXTENDED) push_arg("-E"); + if (opt->regflags & REG_ICASE) + push_arg("-i"); if (opt->word_regexp) push_arg("-w"); if (opt->name_only) @@ -533,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) @@ -628,10 +636,9 @@ static int grep_tree(struct grep_opt *opt, const char **paths, static int grep_object(struct grep_opt *opt, const char **paths, struct object *obj, const char *name) { - if (!strcmp(obj->type, blob_type)) + if (obj->type == TYPE_BLOB) return grep_sha1(opt, obj->sha1, name); - if (!strcmp(obj->type, commit_type) || - !strcmp(obj->type, tree_type)) { + if (obj->type == TYPE_COMMIT || obj->type == TYPE_TREE) { struct tree_desc tree; void *data; int hit; @@ -644,19 +651,26 @@ static int grep_object(struct grep_opt *opt, const char **paths, free(data); return hit; } - die("unable to grep from object of type %s", obj->type); + die("unable to grep from object of type %s", typename(obj->type)); } static const char builtin_grep_usage[] = "git-grep