Make "git rev-list" be a builtin
[gitweb.git] / name-rev.c
index 21fecdf542a05e9bfa80990061ed3d0d3c849823..bad8a5377771e678624d01895ca0603070d6bede 100644 (file)
@@ -21,7 +21,7 @@ static void name_rev(struct commit *commit,
 {
        struct rev_name *name = (struct rev_name *)commit->object.util;
        struct commit_list *parents;
-       int parent_number = 0;
+       int parent_number = 1;
 
        if (!commit->object.parsed)
                parse_commit(commit);
@@ -56,7 +56,7 @@ static void name_rev(struct commit *commit,
        for (parents = commit->parents;
                        parents;
                        parents = parents->next, parent_number++) {
-               if (parent_number > 0) {
+               if (parent_number > 1) {
                        char *new_name = xmalloc(strlen(tip_name)+8);
 
                        if (generation > 0)
@@ -93,10 +93,11 @@ static int name_ref(const char *path, const unsigned char *sha1)
        }
        if (o && o->type == commit_type) {
                struct commit *commit = (struct commit *)o;
-               const char *p;
 
-               while ((p = strchr(path, '/')))
-                       path = p+1;
+               if (!strncmp(path, "refs/heads/", 11))
+                       path = path + 11;
+               else if (!strncmp(path, "refs/", 5))
+                       path = path + 5;
 
                name_rev(commit, strdup(path), 0, 0, deref);
        }
@@ -126,6 +127,7 @@ int main(int argc, char **argv)
        int as_is = 0, all = 0, transform_stdin = 0;
 
        setup_git_directory();
+       git_config(git_default_config);
 
        if (argc < 2)
                usage(name_rev_usage);
@@ -164,7 +166,7 @@ int main(int argc, char **argv)
                        continue;
                }
 
-               o = deref_tag(parse_object(sha1));
+               o = deref_tag(parse_object(sha1), *argv, 0);
                if (!o || o->type != commit_type) {
                        fprintf(stderr, "Could not get commit for %s. Skipping.\n",
                                        *argv);
@@ -217,10 +219,9 @@ int main(int argc, char **argv)
                                        if (!strcmp(name, "undefined"))
                                                continue;
 
-                                       fwrite(p_start, p - p_start, 1, stdout);
-                                       fputc('(', stdout);
-                                       fputs(name, stdout);
-                                       fputc(')', stdout);
+                                       fwrite(p_start, p - p_start + 1, 1,
+                                              stdout);
+                                       printf(" (%s)", name);
                                        p_start = p + 1;
                                }
                        }
@@ -230,13 +231,12 @@ int main(int argc, char **argv)
                                fwrite(p_start, p - p_start, 1, stdout);
                }
        } else if (all) {
-               extern struct object **objs;
-               extern int nr_objs;
                int i;
 
-               for (i = 0; i < nr_objs; i++)
-                       printf("%s %s\n", sha1_to_hex(objs[i]->sha1),
-                                       get_rev_name(objs[i]));
+               for (i = 0; i < obj_allocs; i++)
+                       if (objs[i])
+                               printf("%s %s\n", sha1_to_hex(objs[i]->sha1),
+                                               get_rev_name(objs[i]));
        } else
                for ( ; revs; revs = revs->next)
                        printf("%s %s\n", revs->name, get_rev_name(revs->item));