Code

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 c4dbc2ae342833561080f7a18a93bcf5ac5a0dd3..3d79f05995d28214f68640dd3f693033dff03547 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.
 
 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
 -------
 
 OPTIONS
 -------
@@ -26,11 +29,13 @@ OPTIONS
 
 --all::
        Instead of using only the annotated tags, use any ref
 
 --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
 
 --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
 
 --contains::
        Instead of finding the tag that predates the commit, find
index ec404c839b6542deb4e15ca342fd3c0afbbedd2e..d2cfb1b0837ffd1ab3b1f69e8dee0ffa36f2e1ab 100644 (file)
@@ -15,8 +15,8 @@ static const char * const describe_usage[] = {
 };
 
 static int debug;      /* Display lots of verbose info */
 };
 
 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;
 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_;
 {
        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)
        if (a->depth != b->depth)
                return a->depth - b->depth;
        if (a->found_order != b->found_order)
index 16cc63581383360d6dc92a69f646890eb00e580a..e6c9e59b617f4eaaa1148ed29b4ca92116bdf0c2 100755 (executable)
@@ -91,10 +91,10 @@ check_describe D-* HEAD^^
 check_describe A-* HEAD^^2
 check_describe B HEAD^^2^
 
 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^
 check_describe B --tags HEAD^^2^
 
 check_describe B-0-* --long HEAD^^2^