This patch series is rewriting the code that tries to reuse existing packfiles. The code in this patch series was written by GitHub and Peff nicely provided it in the following discussion: https://public-inbox.org/git/3E56B0FD-EBE8-4057-A93A-16EBB09FBCE0@xxxxxxxxxxxxxx/ This is an RFC patch series that mostly for now just tries to split the code into separate commits. If this split is considered ok, then commit messages will be improved and some doc will be added (especially doc for pack.allowPackReuse). Perhaps performance test results will also be provided. Most of the changes are in the last patch (10/10) and I haven't found a good way to split them into several patches. Ideas are welcome. In each of the other preparatory patches there is a small change that might make sense separately. According to Peff this new code is a lot smarter than what it replaces. It allows "holes" in the chunks of packfile to be reused, and skips over them. It rewrites OFS_DELTA offsets as it goes to account for the holes. So it's basically a linear walk over the packfile, but with the important distinction that we don't add those objects to the object_entry array, which makes them very lightweight (especially in memory use, but they also aren't considered bases for finding new deltas, etc). It seems like a good compromise between the cost to serve a clone and the quality of the resulting packfile. I have put Peff as the author of all the commits. Jeff King (10): builtin/pack-objects: report reused packfile objects packfile: expose get_delta_base() ewah/bitmap: introduce bitmap_word_alloc() ewah/bitmap: always allocate 2 more words pack-bitmap: don't rely on bitmap_git->reuse_objects pack-bitmap: introduce bitmap_walk_contains() csum-file: introduce hashfile_total() pack-objects: introduce pack.allowPackReuse builtin/pack-objects: introduce obj_is_packed() pack-objects: improve partial packfile reuse builtin/pack-objects.c | 248 +++++++++++++++++++++++++++++++++-------- csum-file.h | 9 ++ ewah/bitmap.c | 13 ++- ewah/ewok.h | 1 + pack-bitmap.c | 178 ++++++++++++++++++++--------- pack-bitmap.h | 6 +- packfile.c | 10 +- packfile.h | 3 + 8 files changed, 358 insertions(+), 110 deletions(-) -- 2.23.0.46.gd213b4aca1.dirty