git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Date
Feb 9, 2011, 01:50 UTC
Message-ID
<alpine.DEB.2.00.1102081959210.14152@debian>
In-Reply-To
<alpine.DEB.2.00.1102081916330.9042@debian>
On Tue, 8 Feb 2011, Martin von Zweigbergk wrote:
Show 14 quoted lines
> 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
Previous: Martin von ZweigbergkNext: Jonathan Nieder
Message 7 of 12 in “rebase: use @{upstream} if no upstream specified”
  1. rebase: use @{upstream} if no upstream specifiedMartin von Zweigbergk, Feb 8, 2011
  2. Sverre RabbelierFeb 8, 2011
  3. Martin von ZweigbergkFeb 8, 2011
  4. Sverre RabbelierFeb 8, 2011
  5. Jonathan NiederFeb 8, 2011
  6. Martin von ZweigbergkFeb 9, 2011
  7. Martin von ZweigbergkFeb 9, 2011
  8. Jonathan NiederFeb 9, 2011
  9. Martin von ZweigbergkFeb 10, 2011
  10. rebase: use @{upstream} if no upstream specifiedMartin von Zweigbergk, Feb 10, 2011
  11. Junio C HamanoFeb 10, 2011
  12. Martin von ZweigbergkFeb 10, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.