read-cache: fix untracked cache invalidation when split-index is used
commitffcc9ba763a8591119cb28877c84499a7854bff9
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sun, 7 Jun 2015 10:40:52 +0000 (7 17:40 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 8 Jun 2015 16:45:19 +0000 (8 09:45 -0700)
tree554deefb3c42f8067dcc4a91c51bc4127e30ac11
parentfa73a582b5e7e01184171dc310c7ee0bd9bb2721
read-cache: fix untracked cache invalidation when split-index is used

Before this change, t7063.17 fails. The actual action though happens at
t7063.16 where the entry "two" is added back to index after being
removed in the .13. Here we expect a directory invalidate at .16 and
none at .17 where untracked cache is refreshed. But things do not go as
expected when GIT_TEST_SPLIT_INDEX is set.

The different behavior that happens at .16 when split index is used: the
entry "two", when deleted at .13, is simply marked "deleted". When .16
executes, the entry resurfaces from the version in base index. This
happens in merge_base_index() where add_index_entry() is called to add
"two" back from the base index.

This is where the bug comes from. The add_index_entry() is called with
ADD_CACHE_KEEP_CACHE_TREE flag because this version of "two" is not new,
it does not break either cache-tree or untracked cache. The code should
check this flag and not invalidate untracked cache. This causes a second
invalidation violates test expectation. The fix is obvious.

Noticed-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
read-cache.c