describe: Make --tags and --all match lightweight tags more often
authorShawn O. Pearce <spearce@spearce.org>
Mon, 13 Oct 2008 14:39:46 +0000 (07:39 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 17 Oct 2008 18:35:43 +0000 (11:35 -0700)
If the caller supplies --tags they want the lightweight, unannotated
tags to be searched for a match.  If a lightweight tag is closer
in the history, it should be matched, even if an annotated tag is
reachable further back in the commit chain.

The same applies with --all when matching any other type of ref.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Acked-By: Uwe Kleine-K├Ânig <ukleinek@strlen.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-describe.txt
builtin-describe.c
t/t6120-describe.sh

index c4dbc2a..3d79f05 100644 (file)
@@ -18,6 +18,9 @@ shown.  Otherwise, it suffixes the tag name with the number of
 additional commits on top of the tagged object and the
 abbreviated object name of the most recent commit.
 
+By default (without --all or --tags) `git describe` only shows
+annotated tags.  For more information about creating annotated tags
+see the -a and -s options to linkgit:git-tag[1].
 
 OPTIONS
 -------
@@ -26,11 +29,13 @@ OPTIONS
 
 --all::
        Instead of using only the annotated tags, use any ref
-       found in `.git/refs/`.
+       found in `.git/refs/`.  This option enables matching
+       any known branch, remote branch, or lightweight tag.
 
 --tags::
        Instead of using only the annotated tags, use any tag
-       found in `.git/refs/tags`.
+       found in `.git/refs/tags`.  This option enables matching
+       a lightweight (non-annotated) tag.
 
 --contains::
        Instead of finding the tag that predates the commit, find
index ec404c8..d2cfb1b 100644 (file)
@@ -15,8 +15,8 @@ static const char * const describe_usage[] = {
 };
 
 static int debug;      /* Display lots of verbose info */
-static int all;        /* Default to annotated tags only */
-static int tags;       /* But allow any tags if --tags is specified */
+static int all;        /* Any valid ref can be used */
+static int tags;       /* Allow lightweight tags */
 static int longformat;
 static int abbrev = DEFAULT_ABBREV;
 static int max_candidates = 10;
@@ -112,8 +112,6 @@ static int compare_pt(const void *a_, const void *b_)
 {
        struct possible_tag *a = (struct possible_tag *)a_;
        struct possible_tag *b = (struct possible_tag *)b_;
-       if (a->name->prio != b->name->prio)
-               return b->name->prio - a->name->prio;
        if (a->depth != b->depth)
                return a->depth - b->depth;
        if (a->found_order != b->found_order)
index 16cc635..e6c9e59 100755 (executable)
@@ -91,10 +91,10 @@ check_describe D-* HEAD^^
 check_describe A-* HEAD^^2
 check_describe B HEAD^^2^
 
-check_describe A-* --tags HEAD
-check_describe A-* --tags HEAD^
-check_describe D-* --tags HEAD^^
-check_describe A-* --tags HEAD^^2
+check_describe c-* --tags HEAD
+check_describe c-* --tags HEAD^
+check_describe e-* --tags HEAD^^
+check_describe c-* --tags HEAD^^2
 check_describe B --tags HEAD^^2^
 
 check_describe B-0-* --long HEAD^^2^