Subject: Re: Why does git-describe warn about something that you can't control?

From: René Scharfe <[email-masked]>
Date: Fri, 26 Dec 2008 14:44:44 +0100

demerphq schrieb:
> On the perl.git repo if I use git-describe --all on some commits I get
> warnings like this:
> 
> $ git describe --all 3417e4f8422bcf13f799ce1acef44b27ccbef3d8
> warning: tag 'perl-5.005_04' is really 'tags/perl-5.005_04' here
> perl-5.005_04
> 
> Except there doesnt seem to be any explanation for why the warning is
> being produced (it almost, but not quite looks random for the commits
> im looking at), how to silence it, or how to force git-describe to for
> instance use "tags/perl-5.8.0" instead so the warning is not
> generated.
> 
> I think this behaviour is confusing, either the warning should go
> away, or it should be improved and complemented by a switch to force
> git-describe to use the qualified tagname instead, or at the very
> least a switch to silence the warning (which is really annoying when
> you are doing git-describe on hundreds of commits in a go).

The warning was introduced by 212945d4 ("Teach git-describe to verify
annotated tag names before output") by Shawn (cc:'d).

The following patch should fix your issue by making describe ignore the
"tags/" path prefix of, well, tags, which is only present if you call
it with the option --all.

diff --git a/builtin-describe.c b/builtin-describe.c
index d2cfb1b..3a007ed 100644
--- a/builtin-describe.c
+++ b/builtin-describe.c
@@ -158,7 +158,7 @@ static void display_name(struct commit_name *n)
 		n->tag = lookup_tag(n->sha1);
 		if (!n->tag || parse_tag(n->tag) || !n->tag->tag)
 			die("annotated tag %s not available", n->path);
-		if (strcmp(n->tag->tag, n->path))
+		if (strcmp(n->tag->tag, all ? n->path + 5 : n->path))
 			warning("tag '%s' is really '%s' here", n->tag->tag, n->path);
 	}