Re: [PATCH v4 3/4] cache-tree: fix writing cache-tree when CE_REMOVE is present
- From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
- Date
- Dec 16, 2012, 10:15 UTC
- Message-ID
- <CACsJy8DgwQ2jn=tPpE8f22JNE1Vih86d=Xf1iGBznLcwMukd+w@mail.gmail.com>
- In-Reply-To
- <7vk3siqx8b.fsf@alter.siamese.dyndns.org>
On Sun, Dec 16, 2012 at 2:20 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 15 quoted lines
> Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes: > >> entry_count is used in update_one() for two purposes: >> >> 1. to skip through the number of processed entries in in-memory index >> 2. to record the number of entries this cache-tree covers on disk >> >> Unfortunately when CE_REMOVE is present these numbers are not the same >> because CE_REMOVE entries are automatically removed before writing to >> disk but entry_count is not adjusted and still counts CE_REMOVE >> entries. > > Nicely explained. I wonder if we can also add a piece of test to > the patch 4/4 to demonstrate the issue with CE_REMOVE entries, > though.
A hand crafted one, maybe. I did not attempt to recreate it with git commands (and I don't think we update cache-tree after unpack_trees). So I wrote something like this instead:
int main(int ac, char **av)
{
unsigned char sha1[20];
setup_git_directory();
read_cache();
active_cache[1]->ce_flags |= CE_REMOVE;
write_cache_as_tree(sha1, 0, NULL);
return 0;
}I can polish it a bit and write new tests based on it and test-dump-cache-tree if you want.
-- Duy