Thread (12 messages) 12 messages, 2 authors, 2025-12-18
STALE189d
Revisions (2)
  1. v1 [diff vs current]
  2. v2 current

[PATCH v2 0/3] builtin/repack: avoid rewriting up-to-date MIDX

From: Patrick Steinhardt <hidden>
Date: 2025-12-10 12:52:26

Hi,

this small patch series introduces logic to avoid rewriting the
multi-pack index in case it's up-to-date already. This is especially
relevant in the context of geometric repacking, where we may decide to
not write any new packfiles, but we'd still rewrite the multi-pack
index.

This is a follow-up for the discussion that happened at [1].

Changes in v2:
  - Move the logic to skip writing updates into `write_midx_internal()`.
    We already had some logic there to skip no-op rewrites, so we only
    extend that logic now to handle the "--stdin-packs" option. This
    also has the added benefit that we know to strip bitmaps in case the
    write is a no-op.
  - I don't handle the case anymore where the preferred pack is
    changing. We didn't do so in the preexisting checks either, so I
    decided to drop this for now. This _can_ be considered as a bug, and
    if anyone thinks it is then I'll extend these checks.
  - Adapt the tests to use git-multi-pack-index(1) directly.
  - Link to v1: https://lore.kernel.org/r/20251208-pks-skip-noop-rewrite-v1-0-430d52dba9f0@pks.im (local)

Thanks!

Patrick

[1]: [ref]

---
Patrick Steinhardt (3):
      midx: fix `BUG()` when getting preferred pack without a reverse index
      midx-write: extract function to test whether MIDX needs updating
      midx-write: skip rewriting MIDX with `--stdin-packs` unless needed

 midx-write.c                | 113 ++++++++++++++++++++++++++++++++++++--------
 midx.c                      |   2 +-
 pack-revindex.h             |   3 +-
 t/t5319-multi-pack-index.sh |  64 +++++++++++++++++++++++++
 t/t7703-repack-geometric.sh |  35 ++++++++++++++
 5 files changed, 195 insertions(+), 22 deletions(-)

Range-diff versus v1:

1:  11258a799b ! 1:  88ba93d3a5 midx: fix `BUG()` when getting preferred pack without a reverse index
    @@ Commit message
         The function `midx_preferred_pack()` returns the preferred pack for a
         given multi-pack index. To compute the preferred pack we:
     
    -      1. Look up the position of the first object indexed by the multi-pack
    -         index.
    +      1. Take the first position indexed by the MIDX in pseudo-pack order.
     
    -      2. Convert this position from pseudo-pack order into MIDX order.
    +      2. Convert this pseudo-pack position into the MIDX position.
     
    -      3. We then look up pack that corresponds to this MIDX index.
    +      3. We then look up the pack that corresponds to this MIDX position.
     
         This reliably returns the preferred pack given that all of its contained
         objects will be up front in pseudo-pack order.
2:  baf307b521 < -:  ---------- builtin/repack: don't regenerate MIDX unless needed
-:  ---------- > 2:  9bd320b2cf midx-write: extract function to test whether MIDX needs updating
-:  ---------- > 3:  f594865c12 midx-write: skip rewriting MIDX with `--stdin-packs` unless needed

---
base-commit: bdc5341ff65278a3cc80b2e8a02a2f02aa1fac06
change-id: 20251208-pks-skip-noop-rewrite-38d7f01c79c5
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help