You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
2.5 KiB
140 lines
2.5 KiB
#!/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
|
|
|