Re: [PATCH] rebase: use @{upstream} if no upstream specified

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 8 Feb 2011, Martin von Zweigbergk wrote:

> On Tue, 8 Feb 2011, Jonathan Nieder wrote:
> 
> > Martin von Zweigbergk wrote:
> > > On Tue, 8 Feb 2011, Sverre Rabbelier wrote:
> > 
> > >> I particularly like that you explain to the user clearly what they
> > >> have to do to make this work (e.g., configure the upstream). Nice.
> > >
> > > Thanks, but that was stolen from git-pull.sh ;-)
> > 
> > Doesn't that suggest it might belong in some common git-upstream--lib.sh
> > (or git-sh-setup.sh)?
> 
> Maybe it does...

Maybe something like this on top? I put it in git-parse-remote.sh for
now. There were some related functions there, so maybe it's not so
bad. Should I put it there (and rename to git-upstream--lib.sh?), in
new git-upstream--lib.sh or in git-sh-setup.sh.

Changes to the text compared to before:

 * "remote branch" became "upstream branch", even for git pull

 * "You asked me to pull" became "You asked me to merge" or "You asked
   me to rebase", even for git pull

 * Now printed to stderr, because I simply didn't think about it. Good
   or bad?

What do you think?


-- 8< --


diff --git a/git-parse-remote.sh b/git-parse-remote.sh
index 1cc2ba6..ff58d5b 100644
--- a/git-parse-remote.sh
+++ b/git-parse-remote.sh
@@ -99,3 +99,40 @@ get_remote_merge_branch () {
 	    esac
 	esac
 }
+
+error_on_missing_default_upstream () {
+	op_type="$1"
+	op_prep="$2"
+	example="$3"
+	documentation="$4"
+	branch_name=$(git symbolic-ref -q HEAD)
+	if test -z "$branch_name"
+	then
+		die "You are not currently on a branch, so I cannot use any
+'branch.<branchname>.merge' in your configuration file.
+Please specify which upstream branch you want to use on the command
+line and try again (e.g. '$example').
+See $documentation for details."
+	else
+		echo &2> "You asked me to $op_type without telling me which branch you
+want to $op_type $op_prep, and 'branch.${branch_name#refs/heads/}.merge' in
+your configuration file does not tell me, either. Please
+specify which branch you want to use on the command line and
+try again (e.g. '$example').
+See $documentation for details.
+
+If you often $op_type $op_prep the same branch, you may want to
+use something like the following in your configuration file:
+    [branch \"${branch_name#refs/heads/}\"]
+    remote = <nickname>
+    merge = <remote-ref>"
+		test rebase = "$op_type" &&
+		echo &2> "    rebase = true"
+		die "
+    [remote \"<nickname>\"]
+    url = <url>
+    fetch = <refspec>
+
+See git-config(1) for details."
+	fi
+}
diff --git a/git-pull.sh b/git-pull.sh
index eb87f49..8ec1d3d 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -163,34 +163,10 @@ error_on_no_merge_candidates () {
 		echo "You asked to pull from the remote '$1', but did not specify"
 		echo "a branch. Because this is not the default configured remote"
 		echo "for your current branch, you must specify a branch on the command line."
-	elif [ -z "$curr_branch" ]; then
-		echo "You are not currently on a branch, so I cannot use any"
-		echo "'branch.<branchname>.merge' in your configuration file."
-		echo "Please specify which remote branch you want to use on the command"
-		echo "line and try again (e.g. 'git pull <repository> <refspec>')."
-		echo "See git-pull(1) for details."
-	elif [ -z "$upstream" ]; then
-		echo "You asked me to pull without telling me which branch you"
-		echo "want to $op_type $op_prep, and 'branch.${curr_branch}.merge' in"
-		echo "your configuration file does not tell me, either. Please"
-		echo "specify which branch you want to use on the command line and"
-		echo "try again (e.g. 'git pull <repository> <refspec>')."
-		echo "See git-pull(1) for details."
-		echo
-		echo "If you often $op_type $op_prep the same branch, you may want to"
-		echo "use something like the following in your configuration file:"
-		echo
-		echo "    [branch \"${curr_branch}\"]"
-		echo "    remote = <nickname>"
-		echo "    merge = <remote-ref>"
-		test rebase = "$op_type" &&
-			echo "    rebase = true"
-		echo
-		echo "    [remote \"<nickname>\"]"
-		echo "    url = <url>"
-		echo "    fetch = <refspec>"
-		echo
-		echo "See git-config(1) for details."
+	elif [ -z "$curr_branch" -o -z "$upstream" ]; then
+		. git-parse-remote
+		error_on_missing_default_upstream $op_type $op_prep \
+			"git pull <repository> <refspec>" "git-pull(1)"
 	else
 		echo "Your configuration specifies to $op_type $op_prep the ref '${upstream#refs/heads/}'"
 		echo "from the remote, but no such ref was fetched."
diff --git a/git-rebase.sh b/git-rebase.sh
index 5975642..8b39cab 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -144,25 +144,6 @@ run_pre_rebase_hook () {
 	fi
 }
 
-error_on_missing_default_upstream () {
-	branch_name=$(git symbolic-ref -q HEAD)
-	if test -z "$branch_name"
-	then
-		die "You are not currently on a branch, so I cannot use any
-'branch.<branchname>.merge' in your configuration file.
-Please specify which upstream branch you want to use on the command
-line and try again (e.g. 'git rebase <upstream branch>').
-See git-rebase(1) for details."
-	else
-		die "You asked me to rebase without telling me which branch you
-want to rebase against, and 'branch.${branch_name#refs/heads/}.merge' in
-your configuration file does not tell me, either. Please
-specify which branch you want to use on the command line and
-try again (e.g. 'git rebase <upstream branch>').
-See git-rebase(1) for details."
-	fi
-}
-
 test -f "$apply_dir"/applying &&
 	die 'It looks like git-am is in progress. Cannot rebase.'
 
@@ -381,8 +362,13 @@ if test -z "$rebase_root"
 then
 	case "$#" in
 	0)
-		upstream_name=$(git rev-parse --symbolic-full-name --verify -q \
-		@{upstream}) || error_on_missing_default_upstream
+		if ! upstream_name=$(git rev-parse --symbolic-full-name \
+			--verify -q @{upstream})
+		then
+			. git-parse-remote
+			error_on_missing_default_upstream "rebase" "against" \
+				"git rebase <upstream branch>" "git-rebase(1)"
+		fi
 		;;
 	*)	upstream_name="$1"
 		shift
--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]