git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: John Keeping <john@keeping.me.uk>
To: Mike Crowe <mac@mcrowe.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] describe: Add --left-only option
Date: Fri, 17 May 2013 16:03:29 +0100	[thread overview]
Message-ID: <20130517150329.GA27005@serenity.lan> (raw)
In-Reply-To: <1368800666-5222-1-git-send-email-mac@mcrowe.com>

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@mcrowe.com>
> ---
>  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@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2013-05-17 15:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-17 14:24 [PATCH] describe: Add --left-only option Mike Crowe
2013-05-17 15:03 ` John Keeping [this message]
2013-05-17 15:16   ` Mike Crowe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130517150329.GA27005@serenity.lan \
    --to=john@keeping.me.uk \
    --cc=git@vger.kernel.org \
    --cc=mac@mcrowe.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).