]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsck: detect more in-tree d/f conflicts
authorRené Scharfe <l.s.r@web.de>
Thu, 21 May 2020 09:52:54 +0000 (11:52 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 May 2020 18:03:13 +0000 (11:03 -0700)
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>
fsck.c
t/t1450-fsck.sh

diff --git a/fsck.c b/fsck.c
index bc71b0f35bd7a205315059f87b11315f0a02ce3f..2095491735b79296a58f8b1cc697d4a822de2cb3 100644 (file)
--- 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)) {
index 7e70a253f864898769ce858d7e57a70408dc4766..6555a62099028b4e1cb1ae4353fd55fef553c918 100755 (executable)
@@ -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 &&