All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael J Gruber <git@drmicha.warpmail.net>
To: Jeff Epler <unpythonic.net@unpythonic.net>
Cc: git@vger.kernel.org, Jeff Epler <jepler@unpythonic.net>
Subject: Re: [PATCH 1/2] add new output-tuning flags to 'git cherry'
Date: Sat, 30 May 2009 14:18:23 +0200	[thread overview]
Message-ID: <4A21240F.8090902@drmicha.warpmail.net> (raw)
In-Reply-To: <1243647555-25098-1-git-send-email-user@lamp>

Jeff Epler venit, vidit, dixit 30.05.2009 03:39:
> From: Jeff Epler <jepler@unpythonic.net>

git cherry certainly could use a few enhancements. About the proposed
ones, I'm a bit doubtful, besides the issue of unusual option names
which Jakub mentioned:

> 
> The new flags are:
>     -a or -##: abbreviate SHA1s to 7 or ## places
>     -r: reverse 'upstream' and 'head' (useful when on 'head' and wanting to
>         pick from 'upstream')

What's wrong with using "git cherry HEAD upstream" in that case?

>     -d: only show "+" (doesn't have) patches
>     -D: only show "-" (does have) patches

Those are a matter of "git cherry <options> | egrep '^\+' etc.

So I don't think the patch adds new functionality. If anything I would
probably suggest having --abbrev and leaving the others out.

Useful new functionality would be:
- Display the upstream commit name which has the same patch id.
- Deal differently with a limit which is a predecessor of the merge-base.

> 
> Signed-off-by: Jeff Epler <jepler@unpythonic.net>
> ---
>  builtin-log.c |   54 ++++++++++++++++++++++++++++++++++++++++++++----------
>  1 files changed, 44 insertions(+), 10 deletions(-)
> 
> diff --git a/builtin-log.c b/builtin-log.c
> index f10cfeb..420f39e 100644
> --- a/builtin-log.c
> +++ b/builtin-log.c
> @@ -1130,7 +1130,7 @@ static int add_pending_commit(const char *arg, struct rev_info *revs, int flags)
>  }
>  
>  static const char cherry_usage[] =
> -"git cherry [-v] [<upstream> [<head> [<limit>]]]";
> +"git cherry [-v] [-a|-#] [-r] [-d|-D] [<upstream> [<head> [<limit>]]]";
>  int cmd_cherry(int argc, const char **argv, const char *prefix)
>  {
>  	struct rev_info revs;
> @@ -1142,9 +1142,29 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
>  	const char *head = "HEAD";
>  	const char *limit = NULL;
>  	int verbose = 0;
> +	int reverse = 0;
> +	int abbrev = 40;
> +	int show_has = 0;
> +	int show_hasnt = 0;
> +
> +	while(argc > 1 && argv[1][0] == '-')
> +	{
> +		if (!strcmp(argv[1], "-v")) {
> +			verbose = 1;
> +		} else if(!strcmp(argv[1], "-a")) {
> +			abbrev = DEFAULT_ABBREV;
> +		} else if(isdigit(argv[1][1])) {
> +			abbrev = atoi(argv+1);
> +		} else if(!strcmp(argv[1], "-r")) {
> +			reverse = 1;
> +		} else if(!strcmp(argv[1], "-d")) {
> +			show_hasnt = 1;
> +		} else if(!strcmp(argv[1], "-D")) {
> +			show_has = 1;
> +		} else {
> +			die("unrecognized argument: %s", argv[1]);
> +		}
>  
> -	if (argc > 1 && !strcmp(argv[1], "-v")) {
> -		verbose = 1;
>  		argc--;
>  		argv++;
>  	}
> @@ -1173,6 +1193,16 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
>  		upstream = current_branch->merge[0]->dst;
>  	}
>  
> +	if(reverse) {
> +		const char *temp = upstream;
> +		upstream = head;
> +		head = temp;
> +	}
> +
> +	if(!show_has && !show_hasnt) {
> +		show_has = show_hasnt = 1;
> +	}
> +
>  	init_revisions(&revs, prefix);
>  	revs.diff = 1;
>  	revs.combine_merges = 0;
> @@ -1207,27 +1237,31 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
>  		commit_list_insert(commit, &list);
>  	}
>  
> -	while (list) {
> +	for (; list; list=list->next) {
>  		char sign = '+';
> +		int has;
>  
>  		commit = list->item;
> -		if (has_commit_patch_id(commit, &ids))
> +
> +		if ((has = has_commit_patch_id(commit, &ids))) {
>  			sign = '-';
> +			if(!show_has) continue;
> +		} else {
> +			if(!show_hasnt) continue;
> +		}
>  
>  		if (verbose) {
>  			struct strbuf buf = STRBUF_INIT;
>  			pretty_print_commit(CMIT_FMT_ONELINE, commit,
> -			                    &buf, 0, NULL, NULL, 0, 0);
> -			printf("%c %s %s\n", sign,
> +					    &buf, 0, NULL, NULL, 0, 0);
> +			printf("%c %.*s %s\n", sign, abbrev,
>  			       sha1_to_hex(commit->object.sha1), buf.buf);
>  			strbuf_release(&buf);
>  		}
>  		else {
> -			printf("%c %s\n", sign,
> +			printf("%c %.*s\n", sign, abbrev,
>  			       sha1_to_hex(commit->object.sha1));
>  		}
> -
> -		list = list->next;
>  	}
>  
>  	free_patch_ids(&ids);

      parent reply	other threads:[~2009-05-30 12:18 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-30  1:39 [PATCH 1/2] add new output-tuning flags to 'git cherry' Jeff Epler
2009-05-30  1:39 ` [PATCH 2/2] document new flags Jeff Epler
2009-05-30  8:19   ` Jakub Narebski
2009-05-30 12:18 ` Michael J Gruber [this message]

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=4A21240F.8090902@drmicha.warpmail.net \
    --to=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    --cc=jepler@unpythonic.net \
    --cc=unpythonic.net@unpythonic.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.