[PATCH 00/17] cruft packs
From: Taylor Blau <hidden>
Date: 2021-11-29 22:25:55
This series implements "cruft packs", a pack which stores accumulated
unreachable objects, along with a new ".mtimes" file which tracks each
object's last known modification time.
This idea was discussed recently-ish in [1], but the most thorough
discussion I could find is in [2]. The approach settled on in this
series is laid out in detail by the first patch.
For the uninitiated, cruft packs enable repositories to safely run
`git repack -Ad` by storing unreachable objects which have not yet
"aged out" in a separate pack. This prevents repositories from storing
a potentially large number of these such objects as loose.
This series is structured as follows:
- The first patch describes the technical details of cruft packs.
- The next five patches implement reading and writing the new
`.mtimes` format.
- The next six patches implement `git pack-objects --cruft`. The
first five implement this mode when no grace period is specified,
and the six patch adds support for the grace period.
- The next five patches integrate cruft packs with `git repack`,
including the new-ish `--geometric` mode.
- The final patch handles object freshening for objects stored in a
cruft pack.
Thanks in advance for your review.
[1]: https://lore.kernel.org/git/20170610080626.sjujpmgkli4muh7h@sigill.intra.peff.net/ (local)
[2]: https://lore.kernel.org/git/E1SdhJ9-0006B1-6p@tytso-glaptop.cam.corp.google.com/ (local)
Taylor Blau (17):
Documentation/technical: add cruft-packs.txt
pack-mtimes: support reading .mtimes files
pack-write: pass 'struct packing_data' to 'stage_tmp_packfiles'
chunk-format.h: extract oid_version()
pack-mtimes: support writing pack .mtimes files
t/helper: add 'pack-mtimes' test-tool
builtin/pack-objects.c: return from create_object_entry()
builtin/pack-objects.c: --cruft without expiration
reachable: add options to add_unseen_recent_objects_to_traversal
reachable: report precise timestamps from objects in cruft packs
builtin/pack-objects.c: --cruft with expiration
builtin/repack.c: support generating a cruft pack
builtin/repack.c: allow configuring cruft pack generation
builtin/repack.c: use named flags for existing_packs
builtin/repack.c: add cruft packs to MIDX during geometric repack
builtin/gc.c: conditionally avoid pruning objects via loose
sha1-file.c: don't freshen cruft packs
Documentation/Makefile | 1 +
Documentation/config/gc.txt | 21 +-
Documentation/config/repack.txt | 9 +
Documentation/git-gc.txt | 5 +
Documentation/git-pack-objects.txt | 23 +
Documentation/git-repack.txt | 11 +
Documentation/technical/cruft-packs.txt | 95 ++++
Documentation/technical/pack-format.txt | 22 +
Makefile | 2 +
builtin/gc.c | 10 +-
builtin/pack-objects.c | 306 ++++++++++-
builtin/repack.c | 189 ++++++-
bulk-checkin.c | 2 +-
chunk-format.c | 12 +
chunk-format.h | 3 +
commit-graph.c | 18 +-
midx.c | 18 +-
object-file.c | 4 +-
object-store.h | 7 +-
pack-mtimes.c | 139 +++++
pack-mtimes.h | 16 +
pack-objects.c | 6 +
pack-objects.h | 20 +
pack-write.c | 90 +++-
pack.h | 4 +
packfile.c | 18 +-
packfile.h | 1 +
reachable.c | 58 +-
reachable.h | 9 +-
t/helper/test-pack-mtimes.c | 53 ++
t/helper/test-tool.c | 1 +
t/helper/test-tool.h | 1 +
t/t5327-pack-objects-cruft.sh | 685 ++++++++++++++++++++++++
33 files changed, 1757 insertions(+), 102 deletions(-)
create mode 100644 Documentation/technical/cruft-packs.txt
create mode 100644 pack-mtimes.c
create mode 100644 pack-mtimes.h
create mode 100644 t/helper/test-pack-mtimes.c
create mode 100755 t/t5327-pack-objects-cruft.sh
--
2.34.1.25.gb3157a20e6