describe: Break annotated tag ties by tagger date
authorShawn O. Pearce <spearce@spearce.org>
Mon, 12 Apr 2010 23:25:29 +0000 (16:25 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Apr 2010 20:04:50 +0000 (13:04 -0700)
commit03e8b541b38d95d1cd7b287963c82617a0469f80
tree715169882f024461276fd9facb849eac0c6a7860
parente451d06bf39df35d1106ad9bde5e38505533d805
describe: Break annotated tag ties by tagger date

If more than one annotated tag points at the same commit, use the
tag whose tagger field has a more recent date stamp.  This resolves
non-deterministic cases where the maintainer has done:

  $ git tag -a -m "2.1-rc1" v2.1-rc1  deadbeef
  $ git tag -a -m "2.1"     v2.1      deadbeef

If the tag is an older-style annotated tag with no tagger date, we
assume a date stamp at the UNIX epoch. This will cause us to prefer
an annotated tag that has a valid date.

We could also try to consider the tag object chain, favoring a tag
that "includes" another one:

  $ git tag -a -m "2.1-rc0" v2.1-rc1  deadbeef
  $ git tag -a -m "2.1"     v2.1      v2.1-rc1

However traversing the tag's object chain looking for inclusion
is much more complicated.  Its already very likely that even in
these cases the v2.1 tag will have a more recent tagger date than
v2.1-rc1, so with this change describe should still resolve this
by selecting the more recent v2.1.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-describe.c
t/t6120-describe.sh