aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2008-12-22 22:16:51 +0100
committerJunio C Hamano <gitster@pobox.com>2008-12-24 00:14:08 -0800
commit4fb1a19d502f4a2ca47bfb75cce605f3447819e6 (patch)
tree0a7fe923328aa0011f7651e9d32b20926b52e590
parentf5b49ea6191c2d631d1d70305b25d5db3bf05c92 (diff)
downloadgit-4fb1a19d502f4a2ca47bfb75cce605f3447819e6.tar.gz
git-4fb1a19d502f4a2ca47bfb75cce605f3447819e6.tar.xz
rebase -i -p: leave a --cc patch when a merge could not be redone
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.
-rwxr-xr-xgit-rebase--interactive.sh15
-rwxr-xr-xt/t3409-rebase-preserve-merges.sh1
2 files changed, 13 insertions, 3 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 89c39ebc9..c8b0861c0 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -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 ||
diff --git a/t/t3409-rebase-preserve-merges.sh b/t/t3409-rebase-preserve-merges.sh
index 820e0105d..e6c832780 100755
--- a/t/t3409-rebase-preserve-merges.sh
+++ b/t/t3409-rebase-preserve-merges.sh
@@ -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) &&