X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=name-rev.c;h=f92f14e32f647527e8bf49fced6c632be7298985;hb=9a1ae9ab03abaffc977421f182997f3e735e7098;hp=bad8a5377771e678624d01895ca0603070d6bede;hpb=84a9b58c421f9b2d1cc6c195ed441fac48e60392;p=git.git diff --git a/name-rev.c b/name-rev.c index bad8a5377..f92f14e32 100644 --- a/name-rev.c +++ b/name-rev.c @@ -5,7 +5,7 @@ #include "refs.h" static const char name_rev_usage[] = - "git-name-rev [--tags] ( --all | --stdin | commitish [commitish...] )\n"; + "git-name-rev [--tags] ( --all | --stdin | committish [committish...] )\n"; typedef struct rev_name { const char *tip_name; @@ -19,7 +19,7 @@ static void name_rev(struct commit *commit, const char *tip_name, int merge_traversals, int generation, int deref) { - struct rev_name *name = (struct rev_name *)commit->object.util; + struct rev_name *name = (struct rev_name *)commit->util; struct commit_list *parents; int parent_number = 1; @@ -41,7 +41,7 @@ static void name_rev(struct commit *commit, if (name == NULL) { name = xmalloc(sizeof(rev_name)); - commit->object.util = name; + commit->util = name; goto copy_data; } else if (name->merge_traversals > merge_traversals || (name->merge_traversals == merge_traversals && @@ -84,14 +84,14 @@ static int name_ref(const char *path, const unsigned char *sha1) if (tags_only && strncmp(path, "refs/tags/", 10)) return 0; - while (o && o->type == tag_type) { + while (o && o->type == OBJ_TAG) { struct tag *t = (struct tag *) o; if (!t->tagged) break; /* broken repository */ o = parse_object(t->tagged->sha1); deref = 1; } - if (o && o->type == commit_type) { + if (o && o->type == OBJ_COMMIT) { struct commit *commit = (struct commit *)o; if (!strncmp(path, "refs/heads/", 11)) @@ -108,7 +108,13 @@ static int name_ref(const char *path, const unsigned char *sha1) static const char* get_rev_name(struct object *o) { static char buffer[1024]; - struct rev_name *n = (struct rev_name *)o->util; + struct rev_name *n; + struct commit *c; + + if (o->type != OBJ_COMMIT) + return "undefined"; + c = (struct commit *) o; + n = c->util; if (!n) return "undefined"; @@ -119,11 +125,10 @@ static const char* get_rev_name(struct object *o) return buffer; } - + int main(int argc, char **argv) { - struct object_list *revs = NULL; - struct object_list **walker = &revs; + struct object_array revs = { 0, 0, NULL }; int as_is = 0, all = 0, transform_stdin = 0; setup_git_directory(); @@ -167,7 +172,7 @@ int main(int argc, char **argv) } o = deref_tag(parse_object(sha1), *argv, 0); - if (!o || o->type != commit_type) { + if (!o || o->type != OBJ_COMMIT) { fprintf(stderr, "Could not get commit for %s. Skipping.\n", *argv); continue; @@ -178,9 +183,7 @@ int main(int argc, char **argv) if (cutoff > commit->date) cutoff = commit->date; - object_list_append((struct object *)commit, walker); - (*walker)->name = *argv; - walker = &((*walker)->next); + add_object_array((struct object *)commit, *argv, &revs); } for_each_ref(name_ref); @@ -231,15 +234,22 @@ int main(int argc, char **argv) fwrite(p_start, p - p_start, 1, stdout); } } else if (all) { - int i; + int i, max; - 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)); + max = get_max_object_index(); + for (i = 0; i < max; i++) { + struct object * obj = get_indexed_object(i); + if (!obj) + continue; + printf("%s %s\n", sha1_to_hex(obj->sha1), get_rev_name(obj)); + } + } else { + int i; + for (i = 0; i < revs.nr; i++) + printf("%s %s\n", + revs.objects[i].name, + get_rev_name(revs.objects[i].item)); + } return 0; }