#!/bin/sh test_description='combined diff' . ./test-lib.sh setup_helper () { one=$1 branch=$2 side=$3 && git branch $side $branch && for l in $one two three fyra do echo $l done >file && git add file && test_tick && git commit -m $branch && git checkout $side && for l in $one two three quatro do echo $l done >file && git add file && test_tick && git commit -m $side && test_must_fail git merge $branch && for l in $one three four do echo $l done >file && git add file && test_tick && git commit -m "merge $branch into $side" } verify_helper () { it=$1 && # Ignore lines that were removed only from the other parent sed -e ' 1,/^@@@/d /^ -/d s/^\(.\)./\1/ ' "$it" >"$it.actual.1" && sed -e ' 1,/^@@@/d /^- /d s/^.\(.\)/\1/ ' "$it" >"$it.actual.2" && git diff "$it^" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.1" && test_cmp "$it.expect.1" "$it.actual.1" && git diff "$it^2" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.2" && test_cmp "$it.expect.2" "$it.actual.2" } test_expect_success setup ' >file && git add file && test_tick && git commit -m initial && git branch withone && git branch sansone && git checkout withone && setup_helper one withone sidewithone && git checkout sansone && setup_helper "" sansone sidesansone ' test_expect_success 'check combined output (1)' ' git show sidewithone -- >sidewithone && verify_helper sidewithone ' test_expect_success 'check combined output (2)' ' git show sidesansone -- >sidesansone && verify_helper sidesansone ' test_expect_success 'diagnose truncated file' ' >file && git add file && git commit --amend -C HEAD && git show >out && grep "diff --cc file" out ' # Test for a bug reported at # http://thread.gmane.org/gmane.comp.version-control.git/224410 # where a delete lines were missing from combined diff output when they # occurred exactly before the context lines of a later change. test_expect_success 'combine diff missing delete bug' ' git commit -m initial --allow-empty && cat <<-\EOF >test && 1 2 3 4 EOF git add test && git commit -a -m side1 && git checkout -B side1 && git checkout HEAD^ && cat <<-\EOF >test && 0 1 2 3 4modified EOF git add test && git commit -m side2 && git branch -f side2 && test_must_fail git merge --no-commit side1 && cat <<-\EOF >test && 1 2 3 4modified EOF git add test && git commit -a -m merge && git diff-tree -c -p HEAD >actual.tmp && sed -e "1,/^@@@/d" < actual.tmp >actual && tr -d Q <<-\EOF >expected && - 0 1 2 3 -4 +4modified EOF test_cmp expected actual ' test_done