Re: Add a "git-describe" command
- From
Junio C Hamano <junkio@cox.net>
- Date
- Dec 25, 2005, 01:42 UTC
- Message-ID
- <7v4q4yq7f2.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <Pine.LNX.4.64.0512241339120.14098@g5.osdl.org>
Linus Torvalds <torvalds@osdl.org> writes:
> What it does is to take any random commit, and "name" it by looking up the > most recent commit that is tagged and reachable from that commit.
Sounds useful.
> Comments?
> +static struct commit_name {
> + const struct commit *commit;
> + char path[];
> +} **name_array = NULL;I wonder if some tags are more important than others (we may want to pick a signed tag that is a bit further down than an autogenerated snapshot -git47 tag), but that depends on the usage. For bug hunting -git47 is more useful than sparsely done signed tags e.g. -rc4.
Show 13 quoted lines
> +static void describe(struct commit *cmit)
> +...
> + list = NULL;
> + commit_list_insert(cmit, &list);
> + while (list) {
> + struct commit *c = pop_most_recent_commit(&list, SEEN);
> + n = match(c);
> + if (n) {
> + printf("%s-g%.8s\n", n->path, sha1_to_hex(cmit->object.sha1));
> + return;
> + }
> + }
> +}I think this leaks list elements but until/unless this is libified we would not care too much about it. We could use find_unique_abbrev(cmit->object.sha1, 8) but probably it is an overkill.