mirror of
https://github.com/git/git.git
synced 2026-08-08 17:11:48 +00:00
Teach 'git repack' to accept '--geometric' and '--cruft' together. When both are given, the geometric repack rolls up non-cruft packs as usual, and a separate cruft pack is written to collect unreachable objects. Previously, '--cruft' implied `ALL_INTO_ONE`, which is fundamentally incompatible with geometric repacking. Relax this so that '--cruft' only implies `ALL_INTO_ONE` when '--geometric' is not also given. When combining the two modes: - Use the new '--stdin-packs=follow-reachable' mode so that only reachable objects from the rolled-up packs (and any reachable loose objects) appear in the geometric pack. Unreachable objects are left for the cruft writer to collect. - Plumb our `pack_geometry` into `write_cruft_pack()`, so that the latter can tell 'pack-objects' which non-kept packs are below the split (excluded, so their unreachable objects are candidates for the cruft pack) versus above the split (included, so they are treated as reachable). - Handle promisor packs in the cruft writer's geometry path, since promisor packs have their own split point. - Use the refs snapshot (when available) so that pack-objects and the MIDX bitmap writer see the same set of reference tips. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
3.1 KiB
3.1 KiB