git/t/t6428-merge-conflicts-spars...

147 lines
2.8 KiB
Bash
Executable File

#!/bin/sh
test_description="merge cases"
# The setup for all of them, pictorially, is:
#
# A
# o
# / \
# O o ?
# \ /
# o
# B
#
# To help make it easier to follow the flow of tests, they have been
# divided into sections and each test will start with a quick explanation
# of what commits O, A, and B contain.
#
# Notation:
# z/{b,c} means files z/b and z/c both exist
# x/d_1 means file x/d exists with content d1. (Purpose of the
# underscore notation is to differentiate different
# files that might be renamed into each other's paths.)
TEST_PASSES_SANITIZE_LEAK=true
. ./test-lib.sh
. "$TEST_DIRECTORY"/lib-merge.sh
# Testcase basic, conflicting changes in 'numerals'
test_setup_numerals () {
git init numerals_$1 &&
(
cd numerals_$1 &&
>README &&
test_write_lines I II III >numerals &&
git add README numerals &&
test_tick &&
git commit -m "O" &&
git branch O &&
git branch A &&
git branch B &&
git checkout A &&
test_write_lines I II III IIII >numerals &&
git add numerals &&
test_tick &&
git commit -m "A" &&
git checkout B &&
test_write_lines I II III IV >numerals &&
git add numerals &&
test_tick &&
git commit -m "B" &&
cat <<-EOF >expected-index &&
H README
M numerals
M numerals
M numerals
EOF
cat <<-EOF >expected-merge
I
II
III
<<<<<<< HEAD
IIII
=======
IV
>>>>>>> B^0
EOF
)
}
test_expect_success 'conflicting entries written to worktree even if sparse' '
test_setup_numerals plain &&
(
cd numerals_plain &&
git checkout A^0 &&
test_path_is_file README &&
test_path_is_file numerals &&
git sparse-checkout init &&
git sparse-checkout set --no-cone README &&
test_path_is_file README &&
test_path_is_missing numerals &&
test_must_fail git merge -s recursive B^0 &&
git ls-files -t >index_files &&
test_cmp expected-index index_files &&
test_path_is_file README &&
test_path_is_file numerals &&
test_cmp expected-merge numerals &&
# 4 other files:
# * expected-merge
# * expected-index
# * index_files
# * others
git ls-files -o >others &&
test_line_count = 4 others
)
'
test_expect_success 'present-despite-SKIP_WORKTREE handled reasonably' '
test_setup_numerals in_the_way &&
(
cd numerals_in_the_way &&
git checkout A^0 &&
test_path_is_file README &&
test_path_is_file numerals &&
git sparse-checkout init &&
git sparse-checkout set --no-cone README &&
test_path_is_file README &&
test_path_is_missing numerals &&
echo foobar >numerals &&
test_must_fail git merge -s recursive B^0 &&
test_path_is_missing .git/MERGE_HEAD &&
test_path_is_file numerals &&
# numerals should still have "foobar" in it
echo foobar >expect &&
test_cmp expect numerals
)
'
test_done