entry: report more colliding paths
commit850c3a220e7a0b1bf740fba9ac8f3f2b0486a1af
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 28 Mar 2024 08:44:28 +0000 (28 09:44 +0100)
committerJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 17 Apr 2024 20:30:07 +0000 (17 22:30 +0200)
treeeaf8e3015cc4464442c0bbda112d106aacf669ff
parente4930e86c0d521aa6c3c3da9f590e852f6eeac21
entry: report more colliding paths

In b878579ae7 (clone: report duplicate entries on case-insensitive
filesystems, 2018-08-17) code was added to warn about index entries that
resolve to the same file system entity (usually the cause is a
case-insensitive filesystem).

In Git for Windows, where inodes are not trusted (because of a
performance trade-off, inodes are equal to 0 by default), that check
does not compare inode numbers but the verbatim path.

This logic works well when index entries' paths differ only in case.

However, for file/directory conflicts only the file's path was reported,
leaving the user puzzled with what that path collides.

Let's try ot catch colliding paths even if one path is the prefix of the
other. We do this also in setups where the file system is case-sensitive
because the inode check would not be able to catch those collisions.

While not a complete solution (for example, on macOS, Unicode
normalization could also lead to file/directory conflicts but be missed
by this logic), it is at least another defensive layer on top of what
the previous commits added.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
dir.c
dir.h
entry.c