scalar reconfigure: add --maintenance=<mode> option

When users want to enable the latest and greatest configuration options
recommended by Scalar after a Git upgrade, 'scalar reconfigure --all' is
a great option that iterates over all repos in the multi-valued
'scalar.repos' config key.

However, this feature previously forced users to enable background
maintenance. In some environments this is not preferred.

Add a new --maintenance=<mode> option to 'scalar reconfigure' that
provides options for enabling (default), disabling, or leaving
background maintenance config as-is.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Derrick Stolee
2025-05-07 01:50:37 +00:00
committed by Junio C Hamano
parent 882ce0c475
commit a34fef86e0
3 changed files with 47 additions and 6 deletions

View File

@@ -14,7 +14,7 @@ scalar list
scalar register [--[no-]maintenance] [<enlistment>] scalar register [--[no-]maintenance] [<enlistment>]
scalar unregister [<enlistment>] scalar unregister [<enlistment>]
scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>] scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]
scalar reconfigure [ --all | <enlistment> ] scalar reconfigure [--maintenance=<mode>] [ --all | <enlistment> ]
scalar diagnose [<enlistment>] scalar diagnose [<enlistment>]
scalar delete <enlistment> scalar delete <enlistment>
@@ -160,8 +160,19 @@ After a Scalar upgrade, or when the configuration of a Scalar enlistment
was somehow corrupted or changed by mistake, this subcommand allows to was somehow corrupted or changed by mistake, this subcommand allows to
reconfigure the enlistment. reconfigure the enlistment.
With the `--all` option, all enlistments currently registered with Scalar --all::
will be reconfigured. Use this option after each Scalar upgrade. When `--all` is specified, reconfigure all enlistments currently
registered with Scalar by the `scalar.repo` config key. Use this
option after each upgrade to get the latest features.
--maintenance=<mode>::
By default, Scalar configures the enlistment to use Git's
background maintenance feature; this is the same as using the
`--maintenance=enable` value for this option. Use the
`--maintenance=disable` to remove each considered enlistment
from background maintenance. Use `--maitnenance=keep' to leave
the background maintenance configuration untouched for These
repositories.
Diagnose Diagnose
~~~~~~~~ ~~~~~~~~

View File

@@ -668,13 +668,19 @@ static int remove_deleted_enlistment(struct strbuf *path)
static int cmd_reconfigure(int argc, const char **argv) static int cmd_reconfigure(int argc, const char **argv)
{ {
int all = 0; int all = 0;
const char *maintenance_str = NULL;
int maintenance = 1; /* Enable maintenance by default. */
struct option options[] = { struct option options[] = {
OPT_BOOL('a', "all", &all, OPT_BOOL('a', "all", &all,
N_("reconfigure all registered enlistments")), N_("reconfigure all registered enlistments")),
OPT_STRING(0, "maintenance", &maintenance_str,
N_("<mode>"),
N_("signal how to adjust background maintenance")),
OPT_END(), OPT_END(),
}; };
const char * const usage[] = { const char * const usage[] = {
N_("scalar reconfigure [--all | <enlistment>]"), N_("scalar reconfigure [--maintenance=<mode>] [--all | <enlistment>]"),
NULL NULL
}; };
struct string_list scalar_repos = STRING_LIST_INIT_DUP; struct string_list scalar_repos = STRING_LIST_INIT_DUP;
@@ -694,6 +700,18 @@ static int cmd_reconfigure(int argc, const char **argv)
usage_msg_opt(_("--all or <enlistment>, but not both"), usage_msg_opt(_("--all or <enlistment>, but not both"),
usage, options); usage, options);
if (maintenance_str) {
if (!strcmp(maintenance_str, "enable"))
maintenance = 1;
else if (!strcmp(maintenance_str, "disable"))
maintenance = 0;
else if (!strcmp(maintenance_str, "keep"))
maintenance = -1;
else
die(_("unknown mode for --maintenance option: %s"),
maintenance_str);
}
git_config(get_scalar_repos, &scalar_repos); git_config(get_scalar_repos, &scalar_repos);
for (size_t i = 0; i < scalar_repos.nr; i++) { for (size_t i = 0; i < scalar_repos.nr; i++) {
@@ -758,7 +776,8 @@ static int cmd_reconfigure(int argc, const char **argv)
the_repository = old_repo; the_repository = old_repo;
repo_clear(&r); repo_clear(&r);
if (toggle_maintenance(1) >= 0) if (maintenance >= 0 &&
toggle_maintenance(maintenance) >= 0)
succeeded = 1; succeeded = 1;
loop_end: loop_end:

View File

@@ -210,7 +210,18 @@ test_expect_success 'scalar reconfigure' '
GIT_TRACE2_EVENT="$(pwd)/reconfigure" scalar reconfigure -a && GIT_TRACE2_EVENT="$(pwd)/reconfigure" scalar reconfigure -a &&
test_path_is_file one/src/cron.txt && test_path_is_file one/src/cron.txt &&
test true = "$(git -C one/src config core.preloadIndex)" && test true = "$(git -C one/src config core.preloadIndex)" &&
test_subcommand git maintenance start <reconfigure test_subcommand git maintenance start <reconfigure &&
test_subcommand ! git maintenance unregister --force <reconfigure &&
GIT_TRACE2_EVENT="$(pwd)/reconfigure-maint-disable" \
scalar reconfigure -a --maintenance=disable &&
test_subcommand ! git maintenance start <reconfigure-maint-disable &&
test_subcommand git maintenance unregister --force <reconfigure-maint-disable &&
GIT_TRACE2_EVENT="$(pwd)/reconfigure-maint-keep" \
scalar reconfigure --maintenance=keep -a &&
test_subcommand ! git maintenance start <reconfigure-maint-keep &&
test_subcommand ! git maintenance unregister --force <reconfigure-maint-keep
' '
test_expect_success 'scalar reconfigure --all with includeIf.onbranch' ' test_expect_success 'scalar reconfigure --all with includeIf.onbranch' '