[PATCH v2 2/9] builtin/gc: make `too_many_loose_objects()` reusable without GC config
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Oct 21, 2025, 14:13 UTC
- Message-ID
- <20251021-pks-maintenance-geometric-strategy-v2-2-f0d727832b80@pks.im>
- In-Reply-To
- <20251021-pks-maintenance-geometric-strategy-v2-0-f0d727832b80@pks.im>
To decide whether or not a repository needs to be repacked we estimate the number of loose objects. If the number exceeds a certain threshold we perform the repack, otherwise we don't.
This is done via `too_many_loose_objects()`, which takes as parameter the `struct gc_config`. This configuration is only used to determine the threshold. In a subsequent commit we'll add another caller of this function that wants to pass a different limit than the one stored in that structure.
Refactor the function accordingly so that we only take the limit as parameter instead of the whole structure.
Signed-off-by: Patrick Steinhardt <ps@pks.im> --- builtin/gc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/builtin/gc.c b/builtin/gc.c index e9772eb3a30..026d3a1d714 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -447,7 +447,7 @@ static int rerere_gc_condition(struct gc_config *cfg UNUSED) return should_gc; } -static int too_many_loose_objects(struct gc_config *cfg) +static int too_many_loose_objects(int limit) { /* * Quickly check if a "gc" is needed, by estimating how @@ -469,7 +469,7 @@ static int too_many_loose_objects(struct gc_config *cfg) if (!dir) return 0; - auto_threshold = DIV_ROUND_UP(cfg->gc_auto_threshold, 256); + auto_threshold = DIV_ROUND_UP(limit, 256); while ((ent = readdir(dir)) != NULL) { if (strspn(ent->d_name, "0123456789abcdef") != hexsz_loose || ent->d_name[hexsz_loose] != '\0') @@ -703,7 +703,7 @@ static int need_to_gc(struct gc_config *cfg, struct strvec *repack_args) add_repack_all_option(cfg, &keep_pack, repack_args); string_list_clear(&keep_pack, 0); - } else if (too_many_loose_objects(cfg)) + } else if (too_many_loose_objects(cfg->gc_auto_threshold)) add_repack_incremental_option(repack_args); else return 0; @@ -1057,7 +1057,7 @@ int cmd_gc(int argc, !opts.quiet && !daemonized ? COMMIT_GRAPH_WRITE_PROGRESS : 0, NULL); - if (opts.auto_flag && too_many_loose_objects(&cfg)) + if (opts.auto_flag && too_many_loose_objects(cfg.gc_auto_threshold)) warning(_("There are too many unreachable loose objects; " "run 'git prune' to remove them."));
-- 2.51.1.851.g4ebd6896fd.dirty