summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar René Scharfe <l.s.r@web.de>2020-05-21 11:52:54 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2020-05-21 11:03:13 -0700
commitfe747043dc96fd5c151496f0e45dbf80de07793d (patch)
tree7971e7fb2c7202fad06be3f0fe2d489e4da76834
parentt1450: demonstrate undetected in-tree d/f conflict (diff)
downloadtgif-fe747043dc96fd5c151496f0e45dbf80de07793d.tar.xz
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>
-rw-r--r--fsck.c2
-rwxr-xr-xt/t1450-fsck.sh2
2 files changed, 2 insertions, 2 deletions
diff --git a/fsck.c b/fsck.c
index bc71b0f35b..2095491735 100644
--- a/fsck.c
+++ b/fsck.c
@@ -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)) {
diff --git a/t/t1450-fsck.sh b/t/t1450-fsck.sh
index 7e70a253f8..6555a62099 100755
--- a/t/t1450-fsck.sh
+++ b/t/t1450-fsck.sh
@@ -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 &&