On Fri, May 17, 2013 at 03:24:26PM +0100, Mike Crowe wrote: > Only consider the first parent commit when walking the commit history. This > is useful if you only wish to match tags on your branch after a merge. For consistency with "git log" should this be called "--first-parent"? In "git log" --left-only takes effect only when considering a symmetric range, which "git describe" isn't. Whereas --first-parent triggers precisely the behaviour described here. > Signed-off-by: Mike Crowe <mac@xxxxxxxxxx> > --- > Documentation/git-describe.txt | 9 ++++++++- > builtin/describe.c | 5 +++++ > t/t6120-describe.sh | 3 +++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.txt > index 28e5ec0..67f7d8e 100644 > --- a/Documentation/git-describe.txt > +++ b/Documentation/git-describe.txt > @@ -88,6 +88,11 @@ OPTIONS > --always:: > Show uniquely abbreviated commit object as fallback. > > +--left-only:: > + Consider only the left-most parent of any commit with multiple > + parents. This is useful when you wish to not match tags on branches > + merged in the history of the target commit. > + > EXAMPLES > -------- > > @@ -149,7 +154,9 @@ is found, its name will be output and searching will stop. > If an exact match was not found, 'git describe' will walk back > through the commit history to locate an ancestor commit which > has been tagged. The ancestor's tag will be output along with an > -abbreviation of the input committish's SHA-1. > +abbreviation of the input committish's SHA-1. If '--left-only' was > +specified then the walk will only consider the first parent of each > +commit. > > If multiple tags were found during the walk then the tag which > has the fewest commits different from the input committish will be > diff --git a/builtin/describe.c b/builtin/describe.c > index 6636a68..44a4ca5 100644 > --- a/builtin/describe.c > +++ b/builtin/describe.c > @@ -21,6 +21,7 @@ static int debug; /* Display lots of verbose info */ > static int all; /* Any valid ref can be used */ > static int tags; /* Allow lightweight tags */ > static int longformat; > +static int left_only; > static int abbrev = -1; /* unspecified */ > static int max_candidates = 10; > static struct hash_table names; > @@ -336,6 +337,9 @@ static void describe(const char *arg, int last_one) > commit_list_insert_by_date(p, &list); > p->object.flags |= c->object.flags; > parents = parents->next; > + > + if (left_only) > + break; > } > } > > @@ -404,6 +408,7 @@ int cmd_describe(int argc, const char **argv, const char *prefix) > OPT_BOOLEAN(0, "all", &all, N_("use any ref")), > OPT_BOOLEAN(0, "tags", &tags, N_("use any tag, even unannotated")), > OPT_BOOLEAN(0, "long", &longformat, N_("always use long format")), > + OPT_BOOLEAN(0, "left-only", &left_only, N_("only follow left parent")), > OPT__ABBREV(&abbrev), > OPT_SET_INT(0, "exact-match", &max_candidates, > N_("only output exact matches"), 0), > diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh > index f67aa6f..aea7463 100755 > --- a/t/t6120-describe.sh > +++ b/t/t6120-describe.sh > @@ -110,6 +110,9 @@ check_describe tags/e --all HEAD^^^ > check_describe B-0-* --long HEAD^^2^ > check_describe A-3-* --long HEAD^^2 > > +check_describe c-7-* --tags > +check_describe e-3-* --left-only --tags > + > : >err.expect > check_describe A --all A^0 > test_expect_success 'no warning was displayed for A' ' > -- > 1.8.3.rc2.14.g3089c4d > > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html