This series fixes a bug in dir.c which causes t3010 to fail  when
core.ignorecase is true. The problem is that
directory_exists_in_index_icase() behave differently if dirname[len] is
not a '/', even though this is beyond end-of-string. 2eac2a4cc4bdc8d7
(ls-files -k: a directory only can be killed if the index has a
non-directory; 2013-08-15) adds a caller which neglects to ensure that
the the required '/' is present, hence the failure.
I am not happy with the fix, which is too add a '/' after the last
character in dirname just at the call site introduced by
The reason for my unhappiness is that directory_exists_in_index_icase()
makes the assumption, not only that it can access the character beyond
the end-of-string, but also that that character will unconditionally be
'/'. I presume that this was done for the sake of speed (existing
callers always had a '/' beyond end-of-string), but it feels like an
ugly wart. Since the required trailing '/' is purely an implementation
detail of directory_exists_in_index_icase(), and not of
directory_exists_in_index(), a cleaner fix would be for
directory_exists_in_index_icase() to add the '/' it needs, and not
expect the passed in dirname to have a '/' after its last character.
Unfortunately, such a fix would probably negate any optimization benefit
gained by the present implementation.
Eric Sunshine (2):
t3103: demonstrate dir.c:treat_one_path() core.ignorecase failure
dir: test_one_path: fix inconsistent behavior due to missing '/'
dir.c | 12 +++++++++---
t/t3103-ls-tree-misc.sh | 15 +++++++++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html