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.
110 lines
2.4 KiB
110 lines
2.4 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2005 Fredrik Kuivinen |
|
# |
|
|
|
test_description='Test merge with directory/file conflicts' |
|
. ./test-lib.sh |
|
|
|
test_expect_success 'prepare repository' ' |
|
echo Hello >init && |
|
git add init && |
|
git commit -m initial && |
|
|
|
git branch B && |
|
mkdir dir && |
|
echo foo >dir/foo && |
|
git add dir/foo && |
|
git commit -m "File: dir/foo" && |
|
|
|
git checkout B && |
|
echo file dir >dir && |
|
git add dir && |
|
git commit -m "File: dir" |
|
' |
|
|
|
test_expect_success 'Merge with d/f conflicts' ' |
|
test_expect_code 1 git merge -m "merge msg" master |
|
' |
|
|
|
test_expect_success 'F/D conflict' ' |
|
git reset --hard && |
|
git checkout master && |
|
rm .git/index && |
|
|
|
mkdir before && |
|
echo FILE >before/one && |
|
echo FILE >after && |
|
git add . && |
|
git commit -m first && |
|
|
|
rm -f after && |
|
git mv before after && |
|
git commit -m move && |
|
|
|
git checkout -b para HEAD^ && |
|
echo COMPLETELY ANOTHER FILE >another && |
|
git add . && |
|
git commit -m para && |
|
|
|
git merge master |
|
' |
|
|
|
test_expect_success 'setup modify/delete + directory/file conflict' ' |
|
git checkout --orphan modify && |
|
git rm -rf . && |
|
git clean -fdqx && |
|
|
|
printf "a\nb\nc\nd\ne\nf\ng\nh\n" >letters && |
|
git add letters && |
|
git commit -m initial && |
|
|
|
# Throw in letters.txt for sorting order fun |
|
# ("letters.txt" sorts between "letters" and "letters/file") |
|
echo i >>letters && |
|
echo "version 2" >letters.txt && |
|
git add letters letters.txt && |
|
git commit -m modified && |
|
|
|
git checkout -b delete HEAD^ && |
|
git rm letters && |
|
mkdir letters && |
|
>letters/file && |
|
echo "version 1" >letters.txt && |
|
git add letters letters.txt && |
|
git commit -m deleted |
|
' |
|
|
|
test_expect_success 'modify/delete + directory/file conflict' ' |
|
git checkout delete^0 && |
|
test_must_fail git merge modify && |
|
|
|
test 5 -eq $(git ls-files -s | wc -l) && |
|
test 4 -eq $(git ls-files -u | wc -l) && |
|
test 1 -eq $(git ls-files -o | wc -l) && |
|
|
|
test -f letters/file && |
|
test -f letters.txt && |
|
test -f letters~modify |
|
' |
|
|
|
test_expect_success 'modify/delete + directory/file conflict; other way' ' |
|
# Yes, we really need the double reset since "letters" appears as |
|
# both a file and a directory. |
|
git reset --hard && |
|
git reset --hard && |
|
git clean -f && |
|
git checkout modify^0 && |
|
|
|
test_must_fail git merge delete && |
|
|
|
test 5 -eq $(git ls-files -s | wc -l) && |
|
test 4 -eq $(git ls-files -u | wc -l) && |
|
test 1 -eq $(git ls-files -o | wc -l) && |
|
|
|
test -f letters/file && |
|
test -f letters.txt && |
|
test -f letters~HEAD |
|
' |
|
|
|
test_done
|
|
|