Merge branch 'lt/objlist'
authorJunio C Hamano <junkio@cox.net>
Thu, 22 Jun 2006 09:15:22 +0000 (02:15 -0700)
committerJunio C Hamano <junkio@cox.net>
Thu, 22 Jun 2006 09:15:22 +0000 (02:15 -0700)
* lt/objlist:
Add "named object array" concept

1  2 
builtin-grep.c
diff --combined builtin-grep.c
index f7767bb4eeacf4d4c06ef54e6bb3f4099e96d198,6a240fb6e908d95a1981ea2437fcd4bea27a6ba9..2e7986cecefc964f665b10d363569951c1f40293
@@@ -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;
         * that continues up to the -- (if exists), and then paths.
         */
  
-       tail = &object_list;
        while (1 < argc) {
                const char *arg = argv[1];
                argc--; argv++;
                /* 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, "--")) {
                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;