git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rebase: use reflog to find common base with upstream
@ 2013-10-16 18:53 John Keeping
  2013-10-16 19:24 ` Jonathan Nieder
                   ` (2 more replies)
  0 siblings, 3 replies; 35+ messages in thread
From: John Keeping @ 2013-10-16 18:53 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Jonathan Nieder, John Keeping

Commit 15a147e (rebase: use @{upstream} if no upstream specified,
2011-02-09) says:

	Make it default to 'git rebase @{upstream}'. That is also what
	'git pull [--rebase]' defaults to, so it only makes sense that
	'git rebase' defaults to the same thing.

but that isn't actually the case.  Since commit d44e712 (pull: support
rebased upstream + fetch + pull --rebase, 2009-07-19), pull has actually
chosen the most recent reflog entry which is an ancestor of the current
branch if it can find one.

Change rebase so that it uses the same logic.

Signed-off-by: John Keeping <john@keeping.me.uk>
---
 git-rebase.sh     | 8 ++++++++
 t/t3400-rebase.sh | 6 ++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/git-rebase.sh b/git-rebase.sh
index 226752f..fd36cf7 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -437,6 +437,14 @@ then
 			error_on_missing_default_upstream "rebase" "rebase" \
 				"against" "git rebase <branch>"
 		fi
+		for reflog in $(git rev-list -g "$upstream_name" 2>/dev/null)
+		do
+			if test "$reflog" = "$(git merge-base "$reflog" HEAD)"
+			then
+				upstream_name=$reflog
+				break
+			fi
+		done
 		;;
 	*)	upstream_name="$1"
 		shift
diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
index ebf93b0..4f45f7e 100755
--- a/t/t3400-rebase.sh
+++ b/t/t3400-rebase.sh
@@ -134,12 +134,14 @@ test_expect_success 'fail when upstream arg is missing and not configured' '
 	test_must_fail git rebase
 '
 
-test_expect_success 'default to @{upstream} when upstream arg is missing' '
+test_expect_success 'default to common base in @{upstream}s reflog if no upstream arg' '
 	git checkout -b default topic &&
 	git config branch.default.remote . &&
 	git config branch.default.merge refs/heads/master &&
 	git rebase &&
-	test "$(git rev-parse default~1)" = "$(git rev-parse master)"
+	git merge-base topic master >expect &&
+	git rev-parse default~1 >actual &&
+	test_cmp expect actual
 '
 
 test_expect_success 'rebase -q is quiet' '
-- 
1.8.4.566.g73d370b

^ permalink raw reply related	[flat|nested] 35+ messages in thread

end of thread, other threads:[~2013-10-29 20:11 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-16 18:53 [PATCH] rebase: use reflog to find common base with upstream John Keeping
2013-10-16 19:24 ` Jonathan Nieder
2013-10-16 19:44   ` John Keeping
2013-10-21  5:03 ` Martin von Zweigbergk
2013-10-21 11:24   ` John Keeping
2013-10-22  6:24     ` Martin von Zweigbergk
2013-10-24 19:04   ` Junio C Hamano
2013-10-24 19:11     ` [PATCH 0/2] finding the fork point from reflog entries Junio C Hamano
2013-10-24 19:11       ` [PATCH 1/2] merge-base: use OPT_CMDMODE and clarify the command line parsing Junio C Hamano
2013-10-24 19:11       ` [PATCH 2/2] merge-base: "--reflog" mode finds fork point from reflog entries Junio C Hamano
2013-10-24 21:01         ` Eric Sunshine
2013-10-24 21:26           ` Junio C Hamano
2013-10-24 21:43             ` Eric Sunshine
2013-10-24 22:13               ` Junio C Hamano
2013-10-24 22:21                 ` [PATCH v2 " Junio C Hamano
2013-10-25  7:12                   ` Johannes Sixt
2013-10-25  8:09                     ` John Keeping
2013-10-25  8:17                       ` Johannes Sixt
2013-10-25 16:53                     ` Junio C Hamano
2013-10-25 21:38                       ` [PATCH v3 2/2] merge-base: teach "--fork-point" mode Junio C Hamano
2013-10-25 21:56                         ` Eric Sunshine
2013-10-26  5:15                         ` Martin von Zweigbergk
2013-10-28 14:47                           ` Junio C Hamano
2013-10-26  9:00                         ` John Keeping
2013-10-28 19:13                           ` Junio C Hamano
2013-10-29  8:51                             ` John Keeping
2013-10-29 20:11                               ` Junio C Hamano
2013-10-24 20:54       ` [PATCH 0/2] finding the fork point from reflog entries John Keeping
2013-10-24 21:20         ` Junio C Hamano
2013-10-24 21:31           ` John Keeping
2013-10-24 21:40             ` John Keeping
2013-10-24 21:50               ` John Keeping
2013-10-25  2:46               ` Junio C Hamano
2013-10-22  5:40 ` [PATCH] rebase: use reflog to find common base with upstream Martin von Zweigbergk
2013-10-24 20:26   ` John Keeping

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).