From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, johannes.schindelin@gmx.de,
Patrick Steinhardt <ps@pks.im>, Derrick Stolee <stolee@gmail.com>
Subject: [PATCH v3 0/4] scalar: add --no-maintenance option
Date: Wed, 07 May 2025 01:50:33 +0000 [thread overview]
Message-ID: <pull.1913.v3.git.1746582637.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1913.v2.git.1746458844.gitgitgadget@gmail.com>
These patches add a new --no-maintenance option to the scalar register and
scalar clone commands. My motivation is based on setting up Scalar clones in
automated environments that set up a repo onto a disk image for use later.
If background maintenance runs during later setup steps, then this
introduces a variable that is unexpected at minimum and disruptive at worst.
The disruption comes in if the automation has steps to run git maintenance
run --task=<X> commands but those commands are blocked due to the
maintenance.lock file.
Functionally, these leave the default behavior as-is but allow disabling the
git maintenance start step when users opt-in to this difference. The idea of
Scalar is to recommend the best practices for a typical user, but allowing
customization for expert users.
Updates in v2
=============
* The previous use of toggle_maintenance() in register_dir() would run the
'git maintenance unregister --force' command. There is a new patch 1 that
is explicit about whether this should or should not happen and new tests
are added to verify this behavior in the later patches.
* A new patch 4 adds the --[no-]maintenance option to scalar reconfigure.
Updates in v3
=============
* Patch 4 converts the --[no-]maintenance option of scalar reconfigure to
--maintenance=<mode> to keep the default behavior the same (enable
maintenance) but also allow two other modes: disable maintenance and
leave maintenance as configured.
Thanks, -Stolee
Derrick Stolee (4):
scalar: customize register_dir()'s behavior
scalar register: add --no-maintenance option
scalar clone: add --no-maintenance option
scalar reconfigure: add --maintenance=<mode> option
Documentation/scalar.adoc | 32 ++++++++++++++++---
scalar.c | 65 +++++++++++++++++++++++++++++++--------
t/t9210-scalar.sh | 26 ++++++++++++++--
t/t9211-scalar-clone.sh | 11 ++++++-
4 files changed, 114 insertions(+), 20 deletions(-)
base-commit: f65182a99e545d2f2bc22e6c1c2da192133b16a3
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1913%2Fderrickstolee%2Fscalar-no-maintenance-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1913/derrickstolee/scalar-no-maintenance-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1913
Range-diff vs v2:
1: f3a3cfe3ef1 = 1: f3a3cfe3ef1 scalar: customize register_dir()'s behavior
2: 1b99a559520 = 2: 1b99a559520 scalar register: add --no-maintenance option
3: e52b1282d93 = 3: e52b1282d93 scalar clone: add --no-maintenance option
4: 6fac9c4c394 ! 4: 684f04aaf7e scalar reconfigure: add --no-maintenance option
@@ Metadata
Author: Derrick Stolee <dstolee@microsoft.com>
## Commit message ##
- scalar reconfigure: add --no-maintenance option
+ 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
@@ Commit message
However, this feature previously forced users to enable background
maintenance. In some environments this is not preferred.
- Add a new --[no-]maintenance option to 'scalar reconfigure' that avoids
- running 'git maintenance start' on these enlistments.
+ 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>
## Documentation/scalar.adoc ##
@@ Documentation/scalar.adoc: scalar list
scalar unregister [<enlistment>]
scalar run ( all | config | commit-graph | fetch | loose-objects | pack-files ) [<enlistment>]
-scalar reconfigure [ --all | <enlistment> ]
-+scalar reconfigure [--[no-]maintenance] [ --all | <enlistment> ]
++scalar reconfigure [--maintenance=<mode>] [ --all | <enlistment> ]
scalar diagnose [<enlistment>]
scalar delete <enlistment>
@@ Documentation/scalar.adoc: After a Scalar upgrade, or when the configuration of
+ registered with Scalar by the `scalar.repo` config key. Use this
+ option after each upgrade to get the latest features.
+
-+--[no-]maintenance::
++--maintenance=<mode>::
+ By default, Scalar configures the enlistment to use Git's
-+ background maintenance feature. Use the `--no-maintenance` to skip
-+ this configuration and leave the repositories in whatever state is
-+ currently configured.
++ 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
~~~~~~~~
## scalar.c ##
@@ scalar.c: static int remove_deleted_enlistment(struct strbuf *path)
-
static int cmd_reconfigure(int argc, const char **argv)
{
-- int all = 0;
-+ int all = 0, maintenance = 1;
+ 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_BOOL(0, "maintenance", &maintenance,
-+ N_("specify if background maintenance should be enabled")),
++ 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 [--[no-]maintenance] [--all | <enlistment>]"),
++ N_("scalar reconfigure [--maintenance=<mode>] [--all | <enlistment>]"),
NULL
};
struct string_list scalar_repos = STRING_LIST_INIT_DUP;
+@@ scalar.c: 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++) {
@@ scalar.c: static int cmd_reconfigure(int argc, const char **argv)
the_repository = old_repo;
repo_clear(&r);
- if (toggle_maintenance(1) >= 0)
-+ if (maintenance &&
-+ toggle_maintenance(1) >= 0)
++ if (maintenance >= 0 &&
++ toggle_maintenance(maintenance) >= 0)
succeeded = 1;
loop_end:
@@ t/t9210-scalar.sh: test_expect_success 'scalar reconfigure' '
+ test_subcommand git maintenance start <reconfigure &&
+ test_subcommand ! git maintenance unregister --force <reconfigure &&
+
-+ GIT_TRACE2_EVENT="$(pwd)/reconfigure-maint" scalar reconfigure --no-maintenance -a &&
-+ test_subcommand ! git maintenance start <reconfigure-maint &&
-+ test_subcommand ! git maintenance unregister --force <reconfigure-maint
++ 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' '
--
gitgitgadget
next prev parent reply other threads:[~2025-05-07 1:50 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-30 10:24 [PATCH 0/2] scalar: add --no-maintenance option Derrick Stolee via GitGitGadget
2025-04-30 10:24 ` [PATCH 1/2] scalar register: " Derrick Stolee via GitGitGadget
2025-05-02 9:15 ` Patrick Steinhardt
2025-05-02 15:01 ` Derrick Stolee
2025-04-30 10:24 ` [PATCH 2/2] scalar clone: " Derrick Stolee via GitGitGadget
2025-04-30 20:28 ` [PATCH 0/2] scalar: " Junio C Hamano
2025-05-01 13:21 ` Derrick Stolee
2025-05-01 16:38 ` Junio C Hamano
2025-05-01 18:20 ` Junio C Hamano
2025-05-05 15:27 ` [PATCH v2 0/4] " Derrick Stolee via GitGitGadget
2025-05-05 15:27 ` [PATCH v2 1/4] scalar: customize register_dir()'s behavior Derrick Stolee via GitGitGadget
2025-05-05 15:27 ` [PATCH v2 2/4] scalar register: add --no-maintenance option Derrick Stolee via GitGitGadget
2025-05-05 15:27 ` [PATCH v2 3/4] scalar clone: " Derrick Stolee via GitGitGadget
2025-05-05 15:27 ` [PATCH v2 4/4] scalar reconfigure: " Derrick Stolee via GitGitGadget
2025-05-05 21:47 ` Junio C Hamano
2025-05-06 18:00 ` Derrick Stolee
2025-05-06 22:16 ` Junio C Hamano
2025-05-07 1:50 ` Derrick Stolee via GitGitGadget [this message]
2025-05-07 1:50 ` [PATCH v3 1/4] scalar: customize register_dir()'s behavior Derrick Stolee via GitGitGadget
2025-05-07 1:50 ` [PATCH v3 2/4] scalar register: add --no-maintenance option Derrick Stolee via GitGitGadget
2025-05-07 1:50 ` [PATCH v3 3/4] scalar clone: " Derrick Stolee via GitGitGadget
2025-05-07 1:50 ` [PATCH v3 4/4] scalar reconfigure: add --maintenance=<mode> option Derrick Stolee via GitGitGadget
2025-05-07 21:46 ` Junio C Hamano
2025-05-12 14:34 ` Derrick Stolee
2025-05-12 17:44 ` Junio C Hamano
2025-05-12 18:02 ` Derrick Stolee
2025-05-14 12:28 ` Junio C Hamano
2025-05-14 13:52 ` [PATCH 5/4] scalar reconfigure: improve --maintenance docs Derrick Stolee
2025-05-14 22:16 ` Junio C Hamano
2025-05-16 16:36 ` Derrick Stolee
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.1913.v3.git.1746582637.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=ps@pks.im \
--cc=stolee@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).