From: Junio C Hamano Date: Thu, 22 Jun 2006 09:15:22 +0000 (-0700) Subject: Merge branch 'lt/objlist' X-Git-Tag: v1.4.1-rc1^2~8 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/f97ccded3102cb1ccd5333226a9368949ccee74b?ds=inline;hp=-c Merge branch 'lt/objlist' * lt/objlist: Add "named object array" concept --- f97ccded3102cb1ccd5333226a9368949ccee74b diff --combined builtin-grep.c index f7767bb4ee,6a240fb6e9..2e7986cece --- a/builtin-grep.c +++ b/builtin-grep.c @@@ -29,11 -29,10 +29,11 @@@ static int pathspec_matches(const char 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; @@@ -658,7 -657,7 +658,7 @@@ int cmd_grep(int argc, const char **arg int cached = 0; int seen_dashdash = 0; struct grep_opt opt; - struct object_list *list, **tail, *object_list = NULL; + struct object_array list = { 0, 0, NULL }; const char *prefix = setup_git_directory(); const char **paths = NULL; int i; @@@ -678,7 -677,6 +678,6 @@@ * that continues up to the -- (if exists), and then paths. */ - tail = &object_list; while (1 < argc) { const char *arg = argv[1]; argc--; argv++; @@@ -852,12 -850,9 +851,9 @@@ /* Is it a rev? */ if (!get_sha1(arg, sha1)) { struct object *object = parse_object(sha1); - struct object_list *elem; if (!object) die("bad object %s", arg); - elem = object_list_insert(object, tail); - elem->name = arg; - tail = &elem->next; + add_object_array(object, arg, &list); continue; } if (!strcmp(arg, "--")) { @@@ -882,16 -877,16 +878,16 @@@ paths[1] = NULL; } - if (!object_list) + if (!list.nr) return !grep_cache(&opt, paths, cached); if (cached) die("both --cached and trees are given."); - for (list = object_list; list; list = list->next) { + for (i = 0; i < list.nr; i++) { struct object *real_obj; - real_obj = deref_tag(list->item, NULL, 0); - if (grep_object(&opt, paths, real_obj, list->name)) + real_obj = deref_tag(list.objects[i].item, NULL, 0); + if (grep_object(&opt, paths, real_obj, list.objects[i].name)) hit = 1; } return !hit;