mirror of
https://github.com/git/git
synced 2024-11-04 16:17:49 +00:00
de54b450a3
We conditionally release the index used for reading gitattributes in merge-ort based on whether or the index has been populated. This check uses `cache_nr` as a condition. This isn't sufficient though, as the variable may be zero even when some other parts of the index have been populated. This leads to memory leaks when sparse checkouts are in use, as we may not end up releasing the sparse checkout patterns. Fix this issue by unconditionally releasing the index. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
146 lines
2.8 KiB
Bash
Executable file
146 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
|