threads / patch / 16912

patchgit-cherry: make <upstream> parameter optional

Subject: [PATCH] git-cherry: make <upstream> parameter optional

## tl;dr

7 messages between Dec 29, 2008 and Jan 1, 2009. Diffs are folded; open one to read it.

replies: 6people: 4as markdown or json

Markus Heidelberg· Dec 29, 2008, 17:45 UTC · lore

The upstream branch <upstream> now defaults to the first tracked remote branch, which is set by the configuration variables branch.<name>.remote and branch.<name>.merge of the current branch.

Without such a remote branch, the command "git cherry [-v]" fails with usage output as before and an additional message.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
I'm not sure, whether the usage output would be still necessary.
 Documentation/git-cherry.txt |    3 ++-
 builtin-log.c                |   16 ++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)
Show changes to 2 files +16 −3

Documentation/git-cherry.txt, builtin-log.c

diff --git a/Documentation/git-cherry.txt b/Documentation/git-cherry.txt
index 74d14c4..556ea23 100644
--- a/Documentation/git-cherry.txt
+++ b/Documentation/git-cherry.txt
@@ -7,7 +7,7 @@ git-cherry - Find commits not merged upstream
 
 SYNOPSIS
 --------
-'git cherry' [-v] <upstream> [<head>] [<limit>]
+'git cherry' [-v] [<upstream>] [<head>] [<limit>]
 
 DESCRIPTION
 -----------
@@ -51,6 +51,7 @@ OPTIONS
 
 <upstream>::
 	Upstream branch to compare against.
+	Defaults to the first tracked remote branch, if available.
 
 <head>::
 	Working branch; defaults to HEAD.
diff --git a/builtin-log.c b/builtin-log.c
index 99d1137..243f857 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -16,6 +16,7 @@
 #include "patch-ids.h"
 #include "run-command.h"
 #include "shortlog.h"
+#include "remote.h"
 
 /* Set a default date-time format for git log ("log.date" config variable) */
 static const char *default_date_mode = NULL;
@@ -1070,13 +1071,14 @@ 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] [<upstream>] [<head>] [<limit>]";
 int cmd_cherry(int argc, const char **argv, const char *prefix)
 {
 	struct rev_info revs;
 	struct patch_ids ids;
 	struct commit *commit;
 	struct commit_list *list = NULL;
+	struct branch *current_branch;
 	const char *upstream;
 	const char *head = "HEAD";
 	const char *limit = NULL;
@@ -1099,7 +1101,17 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
 		upstream = argv[1];
 		break;
 	default:
-		usage(cherry_usage);
+		current_branch = branch_get(NULL);
+		if (!current_branch || !current_branch->merge
+					|| !current_branch->merge[0]
+					|| !current_branch->merge[0]->dst) {
+			fprintf(stderr, "Could not find a tracked"
+					" remote branch, please"
+					" specify <upstream> manually.\n");
+			usage(cherry_usage);
+		}
+
+		upstream = current_branch->merge[0]->dst;
 	}
 
 	init_revisions(&revs, prefix);
-- 
1.6.1.35.ge4490
Johannes Schindelin· Dec 30, 2008, 13:13 UTC · re: Markus Heidelberg · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

Hi,
On Mon, 29 Dec 2008, Markus Heidelberg wrote:
Show 8 quoted lines
> The upstream branch <upstream> now defaults to the first tracked
> remote branch, which is set by the configuration variables
> branch.<name>.remote and branch.<name>.merge of the current branch.
> 
> Without such a remote branch, the command "git cherry [-v]" fails with
> usage output as before and an additional message.
> 
> Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>

This would be a massively visible user interface change. At the moment, it does this (which I like):

	$ git cherry-pick
	usage: git cherry-pick [options] <commit-ish>
	    -n, --no-commit       don't automatically commit
	    -e, --edit            edit the commit message
	    -x                    append commit name when cherry-picking
	    -r                    no-op (backward compatibility)
	    -s, --signoff         add Signed-off-by:
	    -m, --mainline <n>    parent number

Opposed, Dscho

Markus Heidelberg· Dec 30, 2008, 13:37 UTC · re: Johannes Schindelin · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

Johannes Schindelin, 30.12.2008:
Show 28 quoted lines
> Hi,
> 
> On Mon, 29 Dec 2008, Markus Heidelberg wrote:
> 
> > The upstream branch <upstream> now defaults to the first tracked
> > remote branch, which is set by the configuration variables
> > branch.<name>.remote and branch.<name>.merge of the current branch.
> > 
> > Without such a remote branch, the command "git cherry [-v]" fails with
> > usage output as before and an additional message.
> > 
> > Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
> 
> This would be a massively visible user interface change.  At the moment, 
> it does this (which I like):
> 
> 	$ git cherry-pick
> 	usage: git cherry-pick [options] <commit-ish>
> 
> 	    -n, --no-commit       don't automatically commit
> 	    -e, --edit            edit the commit message
> 	    -x                    append commit name when cherry-picking
> 	    -r                    no-op (backward compatibility)
> 	    -s, --signoff         add Signed-off-by:
> 	    -m, --mainline <n>    parent number
> 
> Opposed,
> Dscho
The patch was about git-cherry, not git-cherry-pick.
Markus
Johannes Schindelin· Dec 30, 2008, 13:44 UTC · re: Markus Heidelberg · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

Hi,
On Tue, 30 Dec 2008, Markus Heidelberg wrote:
Show 27 quoted lines
> Johannes Schindelin, 30.12.2008:
> 
> > On Mon, 29 Dec 2008, Markus Heidelberg wrote:
> > 
> > > The upstream branch <upstream> now defaults to the first tracked 
> > > remote branch, which is set by the configuration variables 
> > > branch.<name>.remote and branch.<name>.merge of the current branch.
> > > 
> > > Without such a remote branch, the command "git cherry [-v]" fails 
> > > with usage output as before and an additional message.
> > > 
> > > Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
> > 
> > This would be a massively visible user interface change.  At the moment, 
> > it does this (which I like):
> > 
> > 	$ git cherry-pick
> > 	usage: git cherry-pick [options] <commit-ish>
> > 
> > 	    -n, --no-commit       don't automatically commit
> > 	    -e, --edit            edit the commit message
> > 	    -x                    append commit name when cherry-picking
> > 	    -r                    no-op (backward compatibility)
> > 	    -s, --signoff         add Signed-off-by:
> > 	    -m, --mainline <n>    parent number
> 
> The patch was about git-cherry, not git-cherry-pick.
Oops.

Sorry, Dscho

P.S.: This certainly will not be the last time that I am bitten by the closeness of the names "cherry" (which I _never_ use) and "cherry-pick", which I use frequently. Even worse: the rev-list option that could make that stand-alone plumbing command "cherry" obsolete is called _--cherry-pick_, of all things...

demerphq· Dec 30, 2008, 14:02 UTC · re: Markus Heidelberg · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

2008/12/29 Markus Heidelberg <markus.heidelberg@web.de>:
Show 8 quoted lines
> The upstream branch <upstream> now defaults to the first tracked
> remote branch, which is set by the configuration variables
> branch.<name>.remote and branch.<name>.merge of the current branch.
>
> Without such a remote branch, the command "git cherry [-v]" fails with
> usage output as before and an additional message.
>
> Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
FWIW: I would find this useful. Thanks for writing it.
Yves
-- 
perl -Mre=debug -e "/just|another|perl|hacker/"
Junio C Hamano· Jan 1, 2009, 21:00 UTC · re: Markus Heidelberg · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

Markus Heidelberg <markus.heidelberg@web.de> writes:
Show 10 quoted lines
> diff --git a/Documentation/git-cherry.txt b/Documentation/git-cherry.txt
> index 74d14c4..556ea23 100644
> --- a/Documentation/git-cherry.txt
> +++ b/Documentation/git-cherry.txt
> @@ -7,7 +7,7 @@ git-cherry - Find commits not merged upstream
>  
>  SYNOPSIS
>  --------
> -'git cherry' [-v] <upstream> [<head>] [<limit>]
> +'git cherry' [-v] [<upstream>] [<head>] [<limit>]
Shouldn't this be [<upstream> [<head> [<limit>]]]?
Markus Heidelberg· Jan 1, 2009, 21:56 UTC · re: Junio C Hamano · lore

Re: [PATCH] git-cherry: make <upstream> parameter optional

The upstream branch <upstream> now defaults to the first tracked remote branch, which is set by the configuration variables branch.<name>.remote and branch.<name>.merge of the current branch.

Without such a remote branch, the command "git cherry [-v]" fails with usage output as before and an additional message.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
Junio C Hamano, 01.01.2009:
> > -'git cherry' [-v] <upstream> [<head>] [<limit>]
> > +'git cherry' [-v] [<upstream>] [<head>] [<limit>]
> 
> Shouldn't this be [<upstream> [<head> [<limit>]]]?
Sure.
 Documentation/git-cherry.txt |    3 ++-
 builtin-log.c                |   16 ++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)
Show changes to 2 files +16 −3

Documentation/git-cherry.txt, builtin-log.c

diff --git a/Documentation/git-cherry.txt b/Documentation/git-cherry.txt
index 74d14c4..7deefda 100644
--- a/Documentation/git-cherry.txt
+++ b/Documentation/git-cherry.txt
@@ -7,7 +7,7 @@ git-cherry - Find commits not merged upstream
 
 SYNOPSIS
 --------
-'git cherry' [-v] <upstream> [<head>] [<limit>]
+'git cherry' [-v] [<upstream> [<head> [<limit>]]]
 
 DESCRIPTION
 -----------
@@ -51,6 +51,7 @@ OPTIONS
 
 <upstream>::
 	Upstream branch to compare against.
+	Defaults to the first tracked remote branch, if available.
 
 <head>::
 	Working branch; defaults to HEAD.
diff --git a/builtin-log.c b/builtin-log.c
index 99d1137..7e9616e 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -16,6 +16,7 @@
 #include "patch-ids.h"
 #include "run-command.h"
 #include "shortlog.h"
+#include "remote.h"
 
 /* Set a default date-time format for git log ("log.date" config variable) */
 static const char *default_date_mode = NULL;
@@ -1070,13 +1071,14 @@ 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] [<upstream> [<head> [<limit>]]]";
 int cmd_cherry(int argc, const char **argv, const char *prefix)
 {
 	struct rev_info revs;
 	struct patch_ids ids;
 	struct commit *commit;
 	struct commit_list *list = NULL;
+	struct branch *current_branch;
 	const char *upstream;
 	const char *head = "HEAD";
 	const char *limit = NULL;
@@ -1099,7 +1101,17 @@ int cmd_cherry(int argc, const char **argv, const char *prefix)
 		upstream = argv[1];
 		break;
 	default:
-		usage(cherry_usage);
+		current_branch = branch_get(NULL);
+		if (!current_branch || !current_branch->merge
+					|| !current_branch->merge[0]
+					|| !current_branch->merge[0]->dst) {
+			fprintf(stderr, "Could not find a tracked"
+					" remote branch, please"
+					" specify <upstream> manually.\n");
+			usage(cherry_usage);
+		}
+
+		upstream = current_branch->merge[0]->dst;
 	}
 
 	init_revisions(&revs, prefix);
-- 
1.6.1.35.ge4490

← back to recent threads