t4058: explore duplicate tree entry handling in a bit more detail
While creating the last commit, I found a number of other cases where git would segfault when faced with trees that have duplicate entries. None of these segfaults are in the diffcore-rename code (they all occur in cache-tree and unpack-trees). Further, to my knowledge, no one has ever been adversely affected by these bugs, and given that it has been 15 years and folks have fixed a few other issues with historical duplicate entries (as noted in the last commit), I am not sure we will ever run into anyone having problems with these. So I am not sure these are worth fixing, but it doesn't hurt to at least document these failures in the same test file that is concerned with duplicate tree entries. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
5c72261c66
commit
ac14de13b2
@ -119,4 +119,71 @@ test_expect_success 'diff-tree FROM duplicate tree, with renames' '
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'create a few commits' '
|
||||
git commit-tree -m "Duplicate Entries" two^{tree} >commit_id &&
|
||||
git branch base $(cat commit_id) &&
|
||||
|
||||
git commit-tree -p $(cat commit_id) -m "Just one" three^{tree} >up &&
|
||||
git branch update $(cat up) &&
|
||||
|
||||
git commit-tree -p $(cat up) -m "Back to weird" two^{tree} >final &&
|
||||
git branch final $(cat final) &&
|
||||
|
||||
rm commit_id up final
|
||||
'
|
||||
|
||||
test_expect_failure 'git read-tree does not segfault' '
|
||||
test_when_finished rm .git/index.lock &&
|
||||
test_might_fail git read-tree --reset base
|
||||
'
|
||||
|
||||
test_expect_failure 'reset --hard does not segfault' '
|
||||
test_when_finished rm .git/index.lock &&
|
||||
git checkout base &&
|
||||
test_might_fail git reset --hard
|
||||
'
|
||||
|
||||
test_expect_failure 'git diff HEAD does not segfault' '
|
||||
git checkout base &&
|
||||
GIT_TEST_CHECK_CACHE_TREE=false &&
|
||||
git reset --hard &&
|
||||
test_might_fail git diff HEAD
|
||||
'
|
||||
|
||||
test_expect_failure 'can switch to another branch when status is empty' '
|
||||
git clean -ffdqx &&
|
||||
git status --porcelain -uno >actual &&
|
||||
test_must_be_empty actual &&
|
||||
git checkout update
|
||||
'
|
||||
|
||||
test_expect_success 'forcibly switch to another branch, verify status empty' '
|
||||
git checkout -f update &&
|
||||
git status --porcelain -uno >actual &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
|
||||
test_expect_success 'fast-forward from non-duplicate entries to duplicate' '
|
||||
git merge final
|
||||
'
|
||||
|
||||
test_expect_failure 'clean status, switch branches, status still clean' '
|
||||
git status --porcelain -uno >actual &&
|
||||
test_must_be_empty actual &&
|
||||
git checkout base &&
|
||||
git status --porcelain -uno >actual &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
|
||||
test_expect_success 'switch to base branch and force status to be clean' '
|
||||
git checkout base &&
|
||||
GIT_TEST_CHECK_CACHE_TREE=false git reset --hard &&
|
||||
git status --porcelain -uno >actual &&
|
||||
test_must_be_empty actual
|
||||
'
|
||||
|
||||
test_expect_failure 'fast-forward from duplicate entries to non-duplicate' '
|
||||
git merge update
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user