]> git.ipfire.org Git - thirdparty/git.git/commitdiff
scalar reconfigure: add --maintenance=<mode> option
authorDerrick Stolee <stolee@gmail.com>
Wed, 7 May 2025 01:50:37 +0000 (01:50 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 7 May 2025 21:04:32 +0000 (14:04 -0700)
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>
Documentation/scalar.adoc
scalar.c
t/t9210-scalar.sh

index 7753df3b4352b60294f28b99bd852b4434f499aa..387527be1ea5bc0d9e4f17309d9c84f5592524c6 100644 (file)
@@ -14,7 +14,7 @@ scalar list
 scalar register [--[no-]maintenance] [<enlistment>]
 scalar unregister [<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 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
 reconfigure the enlistment.
 
-With the `--all` option, all enlistments currently registered with Scalar
-will be reconfigured. Use this option after each Scalar upgrade.
+--all::
+       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
 ~~~~~~~~
index dd6e1447e0863470fbbbdad2300781e53bc01842..847d2dd2f58a1b334bd2d9f2331cdf3e8b856ed8 100644 (file)
--- a/scalar.c
+++ b/scalar.c
@@ -668,13 +668,19 @@ static int remove_deleted_enlistment(struct strbuf *path)
 static int cmd_reconfigure(int argc, const char **argv)
 {
        int all = 0;
+       const char *maintenance_str = NULL;
+       int maintenance = 1; /* Enable maintenance by default. */
+
        struct option options[] = {
                OPT_BOOL('a', "all", &all,
                         N_("reconfigure all registered enlistments")),
+               OPT_STRING(0, "maintenance", &maintenance_str,
+                        N_("<mode>"),
+                        N_("signal how to adjust background maintenance")),
                OPT_END(),
        };
        const char * const usage[] = {
-               N_("scalar reconfigure [--all | <enlistment>]"),
+               N_("scalar reconfigure [--maintenance=<mode>] [--all | <enlistment>]"),
                NULL
        };
        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, 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);
 
        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;
                repo_clear(&r);
 
-               if (toggle_maintenance(1) >= 0)
+               if (maintenance >= 0 &&
+                   toggle_maintenance(maintenance) >= 0)
                        succeeded = 1;
 
 loop_end:
index 89a6a2a24d8bd54bdfb306737cef9f19d5ed3406..bd6f0c40d229b606bcdac2f8428f9c9436e40860 100755 (executable)
@@ -210,7 +210,18 @@ test_expect_success 'scalar reconfigure' '
        GIT_TRACE2_EVENT="$(pwd)/reconfigure" scalar reconfigure -a &&
        test_path_is_file one/src/cron.txt &&
        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' '