tvl-depot/third_party/git/t/t6417-merge-ours-theirs.sh
Vincent Ambo f4609b896f merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because
there is some breakage in the git build related to the netrc
credentials helper which someone has taken care of in nixpkgs.

The stable channel is not used for anything other than git, so this
should be fine.

Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
2020-11-21 19:45:56 +01:00

108 lines
2.6 KiB
Bash
Executable file

#!/bin/sh
test_description='Merge-recursive ours and theirs variants'
. ./test-lib.sh
test_expect_success setup '
for i in 1 2 3 4 5 6 7 8 9
do
echo "$i"
done >file &&
git add file &&
cp file elif &&
git commit -m initial &&
sed -e "s/1/one/" -e "s/9/nine/" >file <elif &&
git commit -a -m ours &&
git checkout -b side HEAD^ &&
sed -e "s/9/nueve/" >file <elif &&
git commit -a -m theirs &&
git checkout master^0
'
test_expect_success 'plain recursive - should conflict' '
git reset --hard master &&
test_must_fail git merge -s recursive side &&
grep nine file &&
grep nueve file &&
! grep 9 file &&
grep one file &&
! grep 1 file
'
test_expect_success 'recursive favouring theirs' '
git reset --hard master &&
git merge -s recursive -Xtheirs side &&
! grep nine file &&
grep nueve file &&
! grep 9 file &&
grep one file &&
! grep 1 file
'
test_expect_success 'recursive favouring ours' '
git reset --hard master &&
git merge -s recursive -X ours side &&
grep nine file &&
! grep nueve file &&
! grep 9 file &&
grep one file &&
! grep 1 file
'
test_expect_success 'binary file with -Xours/-Xtheirs' '
echo file binary >.gitattributes &&
git reset --hard master &&
git merge -s recursive -X theirs side &&
git diff --exit-code side HEAD -- file &&
git reset --hard master &&
git merge -s recursive -X ours side &&
git diff --exit-code master HEAD -- file
'
test_expect_success 'pull passes -X to underlying merge' '
git reset --hard master && git pull -s recursive -Xours . side &&
git reset --hard master && git pull -s recursive -X ours . side &&
git reset --hard master && git pull -s recursive -Xtheirs . side &&
git reset --hard master && git pull -s recursive -X theirs . side &&
git reset --hard master && test_must_fail git pull -s recursive -X bork . side
'
test_expect_success SYMLINKS 'symlink with -Xours/-Xtheirs' '
git reset --hard master &&
git checkout -b two master &&
ln -s target-zero link &&
git add link &&
git commit -m "add link pointing to zero" &&
ln -f -s target-two link &&
git commit -m "add link pointing to two" link &&
git checkout -b one HEAD^ &&
ln -f -s target-one link &&
git commit -m "add link pointing to one" link &&
# we expect symbolic links not to resolve automatically, of course
git checkout one^0 &&
test_must_fail git merge -s recursive two &&
# favor theirs to resolve to target-two?
git reset --hard &&
git checkout one^0 &&
git merge -s recursive -X theirs two &&
git diff --exit-code two HEAD link &&
# favor ours to resolve to target-one?
git reset --hard &&
git checkout one^0 &&
git merge -s recursive -X ours two &&
git diff --exit-code one HEAD link
'
test_done