Message ID | f4f7b4c08f682b5ebca474e8c1d51d31a2da76b8.1694632644.git.me@ttaylorr.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 4bbfb003c06c9a3b8e02d8957f053ce938c3d93e |
Headers | show |
Series | repack: refactor pack snapshot-ing logic | expand |
On Thu, Sep 14, 2023 at 12:13 AM Taylor Blau <me@ttaylorr.com> wrote: > > When there is: > > - at least one pre-existing packfile (which is not marked as kept), > - repacking with the `-d` flag, and > - not doing a cruft repack > > , then we pass a handful of additional options to the inner Nit (not worth a reroll): I think the comma at the beginning of the above line would be better after "not doing a cruft repack". > `pack-objects` process, like `--unpack-unreachable`, > `--keep-unreachable`, and `--pack-loose-unreachable`, in addition to > marking any packs we just wrote for promisor remotes as kept in-core > (with `--keep-pack`, as opposed to the presence of a ".keep" file on > disk).
diff --git a/builtin/repack.c b/builtin/repack.c index b5fb14c017..9ebc2e774b 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -105,6 +105,11 @@ struct existing_packs { .non_kept_packs = STRING_LIST_INIT_DUP, \ } +static int has_existing_non_kept_packs(const struct existing_packs *existing) +{ + return existing->non_kept_packs.nr; +} + static void mark_packs_for_deletion_1(struct string_list *names, struct string_list *list) { @@ -1047,7 +1052,8 @@ int cmd_repack(int argc, const char **argv, const char *prefix) if (pack_everything & ALL_INTO_ONE) { repack_promisor_objects(&po_args, &names); - if (existing.non_kept_packs.nr && delete_redundant && + if (has_existing_non_kept_packs(&existing) && + delete_redundant && !(pack_everything & PACK_CRUFT)) { for_each_string_list_item(item, &names) { strvec_pushf(&cmd.args, "--keep-pack=%s-%s.pack",
When there is: - at least one pre-existing packfile (which is not marked as kept), - repacking with the `-d` flag, and - not doing a cruft repack , then we pass a handful of additional options to the inner `pack-objects` process, like `--unpack-unreachable`, `--keep-unreachable`, and `--pack-loose-unreachable`, in addition to marking any packs we just wrote for promisor remotes as kept in-core (with `--keep-pack`, as opposed to the presence of a ".keep" file on disk). Because we store both cruft and non-cruft packs together in the same `existing.non_kept_packs` list, it suffices to check its `nr` member to see if it is zero or not. But a following change will store cruft- and non-cruft packs separately, meaning this check would break as a result. Prepare for this by extracting this part of the check into a new helper function called `has_existing_non_kept_packs()`. This patch does not introduce any functional changes, but prepares us to make a more isolated change in a subsequent patch. Signed-off-by: Taylor Blau <me@ttaylorr.com> --- builtin/repack.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)