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.
145 lines
2.7 KiB
145 lines
2.7 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2007 Junio C Hamano |
|
# |
|
|
|
test_description='per path merge controlled by merge attribute' |
|
|
|
. ./test-lib.sh |
|
|
|
test_expect_success setup ' |
|
|
|
for f in text binary union |
|
do |
|
echo Initial >$f && git add $f || break |
|
done && |
|
test_tick && |
|
git commit -m Initial && |
|
|
|
git branch side && |
|
for f in text binary union |
|
do |
|
echo Master >>$f && git add $f || break |
|
done && |
|
test_tick && |
|
git commit -m Master && |
|
|
|
git checkout side && |
|
for f in text binary union |
|
do |
|
echo Side >>$f && git add $f || break |
|
done && |
|
test_tick && |
|
git commit -m Side && |
|
|
|
git tag anchor |
|
' |
|
|
|
test_expect_success merge ' |
|
|
|
{ |
|
echo "binary -merge" |
|
echo "union merge=union" |
|
} >.gitattributes && |
|
|
|
if git merge master |
|
then |
|
echo Gaah, should have conflicted |
|
false |
|
else |
|
echo Ok, conflicted. |
|
fi |
|
' |
|
|
|
test_expect_success 'check merge result in index' ' |
|
|
|
git ls-files -u | grep binary && |
|
git ls-files -u | grep text && |
|
! (git ls-files -u | grep union) |
|
|
|
' |
|
|
|
test_expect_success 'check merge result in working tree' ' |
|
|
|
git cat-file -p HEAD:binary >binary-orig && |
|
grep "<<<<<<<" text && |
|
cmp binary-orig binary && |
|
! grep "<<<<<<<" union && |
|
grep Master union && |
|
grep Side union |
|
|
|
' |
|
|
|
cat >./custom-merge <<\EOF |
|
#!/bin/sh |
|
|
|
orig="$1" ours="$2" theirs="$3" exit="$4" |
|
( |
|
echo "orig is $orig" |
|
echo "ours is $ours" |
|
echo "theirs is $theirs" |
|
echo "=== orig ===" |
|
cat "$orig" |
|
echo "=== ours ===" |
|
cat "$ours" |
|
echo "=== theirs ===" |
|
cat "$theirs" |
|
) >"$ours+" |
|
cat "$ours+" >"$ours" |
|
rm -f "$ours+" |
|
exit "$exit" |
|
EOF |
|
chmod +x ./custom-merge |
|
|
|
test_expect_success 'custom merge backend' ' |
|
|
|
echo "* merge=union" >.gitattributes && |
|
echo "text merge=custom" >>.gitattributes && |
|
|
|
git reset --hard anchor && |
|
git config --replace-all \ |
|
merge.custom.driver "./custom-merge %O %A %B 0" && |
|
git config --replace-all \ |
|
merge.custom.name "custom merge driver for testing" && |
|
|
|
git merge master && |
|
|
|
cmp binary union && |
|
sed -e 1,3d text >check-1 && |
|
o=$(git unpack-file master^:text) && |
|
a=$(git unpack-file side^:text) && |
|
b=$(git unpack-file master:text) && |
|
sh -c "./custom-merge $o $a $b 0" && |
|
sed -e 1,3d $a >check-2 && |
|
cmp check-1 check-2 && |
|
rm -f $o $a $b |
|
' |
|
|
|
test_expect_success 'custom merge backend' ' |
|
|
|
git reset --hard anchor && |
|
git config --replace-all \ |
|
merge.custom.driver "./custom-merge %O %A %B 1" && |
|
git config --replace-all \ |
|
merge.custom.name "custom merge driver for testing" && |
|
|
|
if git merge master |
|
then |
|
echo "Eh? should have conflicted" |
|
false |
|
else |
|
echo "Ok, conflicted" |
|
fi && |
|
|
|
cmp binary union && |
|
sed -e 1,3d text >check-1 && |
|
o=$(git unpack-file master^:text) && |
|
a=$(git unpack-file anchor:text) && |
|
b=$(git unpack-file master:text) && |
|
sh -c "./custom-merge $o $a $b 0" && |
|
sed -e 1,3d $a >check-2 && |
|
cmp check-1 check-2 && |
|
rm -f $o $a $b |
|
' |
|
|
|
test_done
|
|
|