Skip to content
  • Patrick Steinhardt's avatar
    refs/reftable: expose auto compaction via new flag · f89356db
    Patrick Steinhardt authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    Under normal circumstances, the "reftable" backend will automatically
    perform compaction after appending to the stack. It is thus not
    necessary and may even be considered wasteful to run git-pack-refs(1) in
    "reftable"-backed repositories as it will cause the backend to compact
    all tables into a single one. We do exactly that though when running
    `git maintenance run --auto` or `git gc --auto`, which gets spawned by
    Git after running some specific commands.
    
    The `--auto` mode is typically only executing optimizations as needed.
    To do so, we already use several heuristics for the various different
    data structures in Git to determine whether to optimize them or not.
    We do not use any heuristics for refs though and instead always optimize
    them.
    
    Introduce a new `PACK_REFS_AUTO` flag that can be passed to the backend.
    When not handled by the backend we will continue to behave the exact
    same as we do right now, that is we optimize refs unconditionally. This
    is done for the "files" backend for now to retain current behaviour,
    even though we may eventually also want to introduce heuristics here.
    For the "reftable" backend though we already do have auto-compaction, so
    we can easily reuse that logic to implement the new auto-packing flag.
    
    Note that under normal circumstances, this should always end up being a
    no-op. After all, we already invoke the code for every single addition
    to the stack. But there are special cases where it can still be helpful
    to execute the auto-compaction code explicitly:
    
      - Concurrent writers may cause compaction to not run due to locks.
    
      - Callers may decide to disable compaction altogether and then pack
        refs at a later point due to various reasons.
    
      - Other implementations of the reftable format may do compaction
        differently or even not at all.
    
    Signed-off-by: default avatarPatrick Steinhardt <ps@pks.im>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    f89356db