From: Junio C Hamano Date: Sun, 25 Dec 2005 01:42:09 GMT Subject: Re: Add a "git-describe" command Message-ID: <7v4q4yq7f2.fsf@assigned-by-dhcp.cox.net> In-Reply-To: Linus Torvalds 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. > +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.