rebase -i -p: leave a --cc patch when a merge could not be redone
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Mon, 22 Dec 2008 21:16:51 +0000 (22:16 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Dec 2008 08:14:08 +0000 (00:14 -0800)
The result is easier to review this way, and the merge resolution has to be
done inside the work tree, not by adjusting "the patch" anyway.

git-rebase--interactive.sh
t/t3409-rebase-preserve-merges.sh

index 89c39ebc9df58a85011219dff21ffac9dd6a53ab..c8b0861c085035c85002f6e2fe969369ea32016f 100755 (executable)
@@ -115,9 +115,18 @@ mark_action_done () {
 }
 
 make_patch () {
-       parent_sha1=$(git rev-parse --verify "$1"^) ||
-               die "Cannot get patch for $1^"
-       git diff-tree -p "$parent_sha1".."$1" > "$DOTEST"/patch
+       sha1_and_parents="$(git rev-list --parents -1 "$1")"
+       case "$sha1_and_parents" in
+       ?*' '?*' '?*)
+               git diff --cc $sha1_and_parents
+               ;;
+       ?*' '?*)
+               git diff-tree -p "$1^!"
+               ;;
+       *)
+               echo "Root commit"
+               ;;
+       esac > "$DOTEST"/patch
        test -f "$DOTEST"/message ||
                git cat-file commit "$1" | sed "1,/^$/d" > "$DOTEST"/message
        test -f "$DOTEST"/author-script ||
index 820e0105d23f97830d7c2c69a32203ed050ea3d8..e6c832780fbe00afe5c513f0f5e4c87d7020e2a4 100755 (executable)
@@ -83,6 +83,7 @@ test_expect_success '--continue works after a conflict' '
        test 2 = $(git ls-files B | wc -l) &&
        echo Resolved again > B &&
        test_must_fail git rebase --continue &&
+       grep "^@@@ " .git/rebase-merge/patch &&
        git add B &&
        git rebase --continue &&
        test 1 = $(git rev-list --all --pretty=oneline | grep "Modify A" | wc -l) &&