Skip to content

Commit

Permalink
fix(gc): make --prune=now compatible with --expire-to
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
adlternative committed Dec 30, 2024
1 parent 14e94bf commit 4254269
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion builtin/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down

0 comments on commit 4254269

Please sign in to comment.