[PATCH v2 2/2] fix(gc): make --prune=now compatible with --expire-to
- From
ZheNing Hu via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Dec 31, 2024, 02:18 UTC
- Message-ID
- <579757957d21faaa8dd9228a191d82f663e93c03.1735611513.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1843.v2.git.1735611513.gitgitgadget@gmail.com>
From: ZheNing Hu <adlternative@gmail.com>
The original `git gc --prune=now` attempted to delete all unreachable objects. However, after the introduction of `--cruft` and `--expire-to=<dir>` in git gc, `--prune=now` can now compress unreachable objects into a cruft pack and store them in the specified <dir> instead of deleting them directly. This is beneficial for recovery in case of data corruption during repository GC. Therefore, update the handling logic of `--prune=now` in gc so that `-a` parameter is only passed to the repack command when neither `--cruft` nor `--expire-to` are used.
Signed-off-by: ZheNing Hu <adlternative@gmail.com> --- builtin/gc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/builtin/gc.c b/builtin/gc.c index 77904694c9f..8656e1caff0 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -433,7 +433,8 @@ static int keep_one_pack(struct string_list_item *item, void *data UNUSED) static void add_repack_all_option(struct gc_config *cfg, struct string_list *keep_pack) { - if (cfg->prune_expire && !strcmp(cfg->prune_expire, "now")) + if (cfg->prune_expire && !strcmp(cfg->prune_expire, "now") + && !(cfg->cruft_packs && cfg->repack_expire_to)) strvec_push(&repack, "-a"); else if (cfg->cruft_packs) { strvec_push(&repack, "--cruft");
-- gitgitgadget