git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "David D. Kilzer" <ddkilzer@kilzer.net>
To: git@vger.kernel.org
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	"David D. Kilzer" <ddkilzer@kilzer.net>
Subject: [PATCH] Fix git rebase --continue to work with touched files
Date: Tue, 27 Jul 2010 03:06:38 -0700	[thread overview]
Message-ID: <1280225198-4539-1-git-send-email-ddkilzer@kilzer.net> (raw)

When performing a non-interactive rebase, sometimes
"git rebase --continue" will fail if an unmodified file is
touched in the working directory:

    You must edit all merge conflicts and then
    mark them as resolved using git add

This is caused by "git diff-files" reporting a difference
between the index and the filesystem:

    :100644 100644 d00491...... 000000...... M	file

The fix is to run "git update-index --refresh" before
"git diff-files" as is done in git-rebase--interactive.

Signed-off-by: David D. Kilzer <ddkilzer@kilzer.net>
---
The reason for the while loop in the test is that this bug only
reproduces about half of the time on my Mac Pro with Mac OS X
10.6.4.  I used 4 loops to make sure the test fails without the
fix.

I also put the test in a separate file since t3400-rebase.sh
changed a lot in e877a4c, and to make it clear what is required
to reproduce the bug.

 git-rebase.sh              |    1 +
 t/t3418-rebase-continue.sh |   40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 0 deletions(-)
 create mode 100755 t/t3418-rebase-continue.sh

diff --git a/git-rebase.sh b/git-rebase.sh
index ab4afa7..2d88742 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -208,6 +208,7 @@ do
 		test -d "$dotest" -o -d "$GIT_DIR"/rebase-apply ||
 			die "No rebase in progress?"
 
+		git update-index --ignore-submodules --refresh &&
 		git diff-files --quiet --ignore-submodules || {
 			echo "You must edit all merge conflicts and then"
 			echo "mark them as resolved using git add"
diff --git a/t/t3418-rebase-continue.sh b/t/t3418-rebase-continue.sh
new file mode 100755
index 0000000..435560c
--- /dev/null
+++ b/t/t3418-rebase-continue.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+test_description='git rebase --continue should work with touched files'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+	echo 1 >F1 &&
+	git add F1 &&
+	git commit -m "commit: new file F1" &&
+
+	echo 2 >F2 &&
+	git add F2 &&
+	git commit -m "commit: new file F2" &&
+
+	git checkout -b topic HEAD^ &&
+
+	echo 22 > F2 &&
+	git add F2 &&
+	git commit -m "commit: new file F2 on topic branch" &&
+
+	git checkout master
+'
+
+
+test_expect_success 'rebase --continue works with touched file' '
+	count=1
+	while test "$count" -le 4
+	do
+		git branch topic$count topic &&
+		test_must_fail git rebase --onto master master topic$count &&
+		echo "Resolved" >F2 &&
+		git add F2 &&
+		touch F1 &&
+		git rebase --continue || exit 1
+		count=$(($count + 1))
+	done
+'
+
+test_done
-- 
1.7.1.1.36.g07b1c

             reply	other threads:[~2010-07-27 10:06 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-27 10:06 David D. Kilzer [this message]
2010-07-27 10:16 ` [PATCH] Fix git rebase --continue to work with touched files Johannes Schindelin
2010-07-27 10:20 ` Ævar Arnfjörð Bjarmason
2010-07-27 19:53 ` Johannes Sixt
2010-07-27 21:29   ` David D. Kilzer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1280225198-4539-1-git-send-email-ddkilzer@kilzer.net \
    --to=ddkilzer@kilzer.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).