X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=name-rev.c;h=c29b93ea7199643885cd74148d03db7d1bbb533b;hb=HEAD;hp=7d89401a41e911ff770b1ef63b56ef1a11619934;hpb=56fc63193975edd4b9f520b6c65c2b97ecd8ee38;p=git.git diff --git a/name-rev.c b/name-rev.c index 7d89401a..c29b93ea 100644 --- a/name-rev.c +++ b/name-rev.c @@ -19,9 +19,9 @@ 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 = 0; + int parent_number = 1; if (!commit->object.parsed) parse_commit(commit); @@ -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 && @@ -56,7 +56,7 @@ copy_data: 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) @@ -84,19 +84,20 @@ 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 == TYPE_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 == TYPE_COMMIT) { 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); } @@ -107,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 != TYPE_COMMIT) + return "undefined"; + c = (struct commit *) o; + n = c->util; if (!n) return "undefined"; @@ -126,6 +133,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); @@ -165,7 +173,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 != TYPE_COMMIT) { fprintf(stderr, "Could not get commit for %s. Skipping.\n", *argv); continue; @@ -231,9 +239,10 @@ int main(int argc, char **argv) } else if (all) { 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));