From: Robert Coup <robert@xxxxxxxxxxx> Make run_auto_maintenance() accept optional config options for a specific invocation of the auto-maintenance process. Signed-off-by: Robert Coup <robert@xxxxxxxxxxx> --- builtin/am.c | 2 +- builtin/commit.c | 2 +- builtin/fetch.c | 2 +- builtin/merge.c | 2 +- builtin/rebase.c | 2 +- run-command.c | 8 +++++++- run-command.h | 5 ++++- 7 files changed, 16 insertions(+), 7 deletions(-) diff --git a/builtin/am.c b/builtin/am.c index 7de2c89ef22..298c6093bff 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1899,7 +1899,7 @@ next: */ if (!state->rebasing) { am_destroy(state); - run_auto_maintenance(state->quiet); + run_auto_maintenance(state->quiet, NULL); } } diff --git a/builtin/commit.c b/builtin/commit.c index b9ed0374e30..84e7ab0a4cc 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1844,7 +1844,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) git_test_write_commit_graph_or_die(); repo_rerere(the_repository, 0); - run_auto_maintenance(quiet); + run_auto_maintenance(quiet, NULL); run_commit_hook(use_editor, get_index_file(), "post-commit", NULL); if (amend && !no_post_rewrite) { commit_post_rewrite(the_repository, current_head, &oid); diff --git a/builtin/fetch.c b/builtin/fetch.c index 8e5e590dd6e..f32b24d182b 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2227,7 +2227,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) } if (enable_auto_gc) - run_auto_maintenance(verbosity < 0); + run_auto_maintenance(verbosity < 0, NULL); cleanup: string_list_clear(&list, 0); diff --git a/builtin/merge.c b/builtin/merge.c index a94a03384ae..8d3e6d0de03 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -472,7 +472,7 @@ static void finish(struct commit *head_commit, * We ignore errors in 'gc --auto', since the * user should see them. */ - run_auto_maintenance(verbosity < 0); + run_auto_maintenance(verbosity < 0, NULL); } } if (new_head && show_diffstat) { diff --git a/builtin/rebase.c b/builtin/rebase.c index d858add3fe8..cbab6c05373 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -552,7 +552,7 @@ static int finish_rebase(struct rebase_options *opts) * We ignore errors in 'git maintenance run --auto', since the * user should see them. */ - run_auto_maintenance(!(opts->flags & (REBASE_NO_QUIET|REBASE_VERBOSE))); + run_auto_maintenance(!(opts->flags & (REBASE_NO_QUIET|REBASE_VERBOSE)), NULL); if (opts->type == REBASE_MERGE) { struct replay_opts replay = REPLAY_OPTS_INIT; diff --git a/run-command.c b/run-command.c index a8501e38ceb..720fd7820c8 100644 --- a/run-command.c +++ b/run-command.c @@ -1798,9 +1798,10 @@ int run_processes_parallel_tr2(int n, get_next_task_fn get_next_task, return result; } -int run_auto_maintenance(int quiet) +int run_auto_maintenance(int quiet, const struct strvec *config_opts) { int enabled; + int i; struct child_process maint = CHILD_PROCESS_INIT; if (!git_config_get_bool("maintenance.auto", &enabled) && @@ -1809,6 +1810,11 @@ int run_auto_maintenance(int quiet) maint.git_cmd = 1; maint.close_object_store = 1; + + if (config_opts) + for (i = 0; i<config_opts->nr; i++) + strvec_pushl(&maint.args, "-c", config_opts->v[i], NULL); + strvec_pushl(&maint.args, "maintenance", "run", "--auto", NULL); strvec_push(&maint.args, quiet ? "--quiet" : "--no-quiet"); diff --git a/run-command.h b/run-command.h index 07bed6c31b4..24021abd41f 100644 --- a/run-command.h +++ b/run-command.h @@ -222,8 +222,11 @@ int run_command(struct child_process *); /* * Trigger an auto-gc + * + * config_opts is an optional list of additional config options to + * pass to the maintenance process in the form "some.option=value". */ -int run_auto_maintenance(int quiet); +int run_auto_maintenance(int quiet, const struct strvec *config_opts); #define RUN_COMMAND_NO_STDIN (1<<0) #define RUN_GIT_CMD (1<<1) -- gitgitgadget