threads / bug / 11280

[BUG?] git rebase -i

Subject: [BUG?] git rebase -i

## tl;dr

7 messages between Dec 14, 2007 and Dec 18, 2007.

replies: 6people: 5as markdown or json

Pieter de Bie· Dec 14, 2007, 01:21 UTC · lore
Hi,
I was just toying with git rebase -i -p, when I found the following:

Tirana:~/git pieter$ /opt/local/bin/git --version git version 1.5.3.5

Tirana:~/git pieter$ time /opt/local/bin/git rebase -p -i HEAD~100 Successfully rebased and updated refs/heads/master.

real 0m17.816s user 0m3.927s sys 0m10.381s

Tirana:~/git pieter$ git --version git version 1.5.4.rc0 Tirana:~/git pieter$ time git rebase -p -i HEAD~100 cat: /Users/pieter/git/.git/.dotest-merge/rewritten/ 1e8df762b38e01685f3aa3613e2d61f73346fcbe: No such file or directory

real 0m20.427s user 0m4.449s sys 0m14.028s

The rebase in 1.5.4.rc0 exists with an error. Another thing to note is that the 1.5.4.rc0 tries to apply 215 patches, while the 1.5.3.5 tries to apply 206 patches. This test was done on the git master branch (tagged 1.5.4.rc0). I did not change anything in the interactive rebase editor (just hit :wq in vim).

- Pieter
Johannes Sixt· Dec 14, 2007, 07:30 UTC · re: Pieter de Bie · lore

Re: [BUG?] git rebase -i

Pieter de Bie schrieb:
> Another thing to note is
> that the 1.5.4.rc0 tries to apply 215 patches, while the 1.5.3.5 tries
> to apply 206 patches.

This is to be expected: 1.5.3.5 counts the comment lines at the top of the action file, of which there are exactly 9, 1.5.4.rc0 does not count them.

-- Hannes
Pieter de Bie· Dec 17, 2007, 16:04 UTC · re: Johannes Sixt · lore

Re: [BUG?] git rebase -i

Hi,
On Dec 14, 2007, at 8:30 AM, Johannes Sixt wrote:
Show 11 quoted lines
> Pieter de Bie schrieb:
>> Another thing to note is
>> that the 1.5.4.rc0 tries to apply 215 patches, while the 1.5.3.5  
>> tries
>> to apply 206 patches.
>
> This is to be expected: 1.5.3.5 counts the comment lines at the top  
> of the
> action file, of which there are exactly 9, 1.5.4.rc0 does not count  
> them.
>
Ok, but what about the error in the rebase?
On Dec 14, 2007, at 2:21 AM, Pieter de Bie wrote:
> Tirana:~/git pieter$ time git rebase -p -i HEAD~100
> cat: /Users/pieter/git/.git/.dotest-merge/rewritten/ 
> 1e8df762b38e01685f3aa3613e2d61f73346fcbe: No such file or directory
- Pieter
Johannes Schindelin· Dec 17, 2007, 16:59 UTC · re: Pieter de Bie · lore

[PATCH] rebase -p -i: handle "no changes" gracefully

Since commit 376ccb8cbb453343998e734d8a1ce79f57a4e092, unchanged SHA-1s are no longer mapped via $REWRITTEN. But the updating phase was not prepared for the old head not being rewritten.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	On Mon, 17 Dec 2007, Pieter de Bie wrote:
	> Ok, but what about the error in the rebase?
	> 
	> On Dec 14, 2007, at 2:21 AM, Pieter de Bie wrote:
	> > Tirana:~/git pieter$ time git rebase -p -i HEAD~100
	> > cat:
	> > /Users/pieter/git/.git/.dotest-merge/rewritten/1e8df762b38e01685f3aa3613e2d61f73346fcbe:
	> > No such file or directory
	This buglet was not caught earlier, probably because a 
	non-rewriting rebase is not really interesting ;-)
 git-rebase--interactive.sh |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index f83e00f..cd7e43f 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -322,7 +322,12 @@ do_next () {
 		test -f "$DOTEST"/current-commit &&
 			current_commit=$(cat "$DOTEST"/current-commit) &&
 			git rev-parse HEAD > "$REWRITTEN"/$current_commit
-		NEWHEAD=$(cat "$REWRITTEN"/$OLDHEAD)
+		if test -f "$REWRITTEN"/$OLDHEAD
+		then
+			NEWHEAD=$(cat "$REWRITTEN"/$OLDHEAD)
+		else
+			NEWHEAD=$OLDHEAD
+		fi
 	else
 		NEWHEAD=$(git rev-parse HEAD)
 	fi &&
-- 
1.5.4.rc0.59.g1d10d
Junio C Hamano· Dec 17, 2007, 20:23 UTC · re: Johannes Schindelin · lore

Re: [PATCH] rebase -p -i: handle "no changes" gracefully

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 19 quoted lines
> Since commit 376ccb8cbb453343998e734d8a1ce79f57a4e092, unchanged
> SHA-1s are no longer mapped via $REWRITTEN.  But the updating
> phase was not prepared for the old head not being rewritten.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>
> 	On Mon, 17 Dec 2007, Pieter de Bie wrote:
>
> 	> Ok, but what about the error in the rebase?
> 	> 
> 	> On Dec 14, 2007, at 2:21 AM, Pieter de Bie wrote:
> 	> > Tirana:~/git pieter$ time git rebase -p -i HEAD~100
> 	> > cat:
> 	> > /Users/pieter/git/.git/.dotest-merge/rewritten/1e8df762b38e01685f3aa3613e2d61f73346fcbe:
> 	> > No such file or directory
>
> 	This buglet was not caught earlier, probably because a 
> 	non-rewriting rebase is not really interesting ;-)
Hmph, care to add a test to t3404?
Johannes Schindelin· Dec 17, 2007, 21:01 UTC · re: Junio C Hamano · lore

[PATCH w/ test] rebase -p -i: handle "no changes" gracefully

Since commit 376ccb8cbb453343998e734d8a1ce79f57a4e092, unchanged SHA-1s are no longer mapped via $REWRITTEN. But the updating phase was not prepared for the old head not being rewritten.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	On Mon, 17 Dec 2007, Junio C Hamano wrote:
	> Hmph, care to add a test to t3404?
	How about this?
 git-rebase--interactive.sh    |    7 ++++++-
 t/t3404-rebase-interactive.sh |    6 ++++++
 2 files changed, 12 insertions(+), 1 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index f83e00f..cd7e43f 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -322,7 +322,12 @@ do_next () {
 		test -f "$DOTEST"/current-commit &&
 			current_commit=$(cat "$DOTEST"/current-commit) &&
 			git rev-parse HEAD > "$REWRITTEN"/$current_commit
-		NEWHEAD=$(cat "$REWRITTEN"/$OLDHEAD)
+		if test -f "$REWRITTEN"/$OLDHEAD
+		then
+			NEWHEAD=$(cat "$REWRITTEN"/$OLDHEAD)
+		else
+			NEWHEAD=$OLDHEAD
+		fi
 	else
 		NEWHEAD=$(git rev-parse HEAD)
 	fi &&
diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index 907c7f9..74a7eb3 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -184,6 +184,12 @@ test_expect_success 'retain authorship when squashing' '
 	git show HEAD | grep "^Author: Twerp Snog"
 '
 
+test_expect_success '-p handles "no changes" gracefully' '
+	HEAD=$(git rev-parse HEAD) &&
+	git rebase -i -p HEAD^ &&
+	test $HEAD = $(git rev-parse HEAD)
+'
+
 test_expect_success 'preserve merges with -p' '
 	git checkout -b to-be-preserved master^ &&
 	: > unrelated-file &&
-- 
1.5.4.rc0.59.g1d10d
Junio C Hamano· Dec 18, 2007, 20:24 UTC · re: Johannes Schindelin · lore

Re: [PATCH w/ test] rebase -p -i: handle "no changes" gracefully

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
Show 12 quoted lines
> Since commit 376ccb8cbb453343998e734d8a1ce79f57a4e092, unchanged
> SHA-1s are no longer mapped via $REWRITTEN.  But the updating
> phase was not prepared for the old head not being rewritten.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>
> 	On Mon, 17 Dec 2007, Junio C Hamano wrote:
>
> 	> Hmph, care to add a test to t3404?
>
> 	How about this?
Looks good.  Thanks.

← back to recent threads