fsck: detect more in-tree d/f conflicts

If the conflict candidate file name from the top of the stack is not a
prefix of the current candiate directory then we can discard it as no
matching directory can come up later.  But we are not done checking the
candidate directory -- the stack might still hold a matching file name,
so stay in the loop and check the next candidate file name.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2020-05-21 11:52:54 +02:00 committed by Junio C Hamano
parent 3d71b1cf60
commit fe747043dc
2 changed files with 2 additions and 2 deletions

2
fsck.c
View File

@ -620,7 +620,7 @@ static int verify_ordered(unsigned mode1, const char *name1,
if (!f_name)
break;
if (!skip_prefix(name2, f_name, &p))
break;
continue;
if (!*p)
return TREE_HAS_DUPS;
if (is_less_than_slash(*p)) {

View File

@ -261,7 +261,7 @@ check_duplicate_names () {
check_duplicate_names success x x.1 x/
check_duplicate_names success x x.1.2 x.1/ x/
check_duplicate_names failure x x.1 x.1.2 x/
check_duplicate_names success x x.1 x.1.2 x/
test_expect_success 'unparseable tree object' '
test_oid_cache <<-\EOF &&