midx: sort and deduplicate objects from packfiles
authorDerrick Stolee <stolee@gmail.com>
Thu, 12 Jul 2018 19:39:29 +0000 (15:39 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 20 Jul 2018 18:27:28 +0000 (11:27 -0700)
commitfe1ed56f5e482507b54a4fb491273f122c5fd9ea
tree2f1e2521f84234aaae3eba17b459fe5d26155e56
parent3227565cfdeabcb06eede914d38c8729e6ff1434
midx: sort and deduplicate objects from packfiles

Before writing a list of objects and their offsets to a multi-pack-index,
we need to collect the list of objects contained in the packfiles. There
may be multiple copies of some objects, so this list must be deduplicated.

It is possible to artificially get into a state where there are many
duplicate copies of objects. That can create high memory pressure if we
are to create a list of all objects before de-duplication. To reduce
this memory pressure without a significant performance drop,
automatically group objects by the first byte of their object id. Use
the IDX fanout tables to group the data, copy to a local array, then
sort.

Copy only the de-duplicated entries. Select the duplicate based on the
most-recent modified time of a packfile containing the object.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
midx.c
packfile.c
packfile.h