From: Derrick Stolee <derrickstolee@github.com>
To: Ronan Pigott <ronan@rjp.ie>, git@vger.kernel.org
Cc: me@ttaylor.com
Subject: Re: [PATCH v2 2/2] maintenance: add option to register in a specific config
Date: Wed, 9 Nov 2022 10:05:32 -0500 [thread overview]
Message-ID: <df1d3485-3913-c132-83b5-09ca2408000b@github.com> (raw)
In-Reply-To: <20221108194930.25805-3-ronan@rjp.ie>
On 11/8/2022 2:49 PM, Ronan Pigott wrote:
> maintenance register currently records the maintenance repo exclusively
> within the user's global configuration, but other configuration files
> may be relevant when running maintenance if they are included from the
> global config. This option allows the user to choose where maintenance
> repos are recorded.
> + Initialize Git config values so any scheduled maintenance will start
> + running on this repository. This adds the repository to the
> + `maintenance.repo` config variable in the current user's global config,
> + or the config specified by --config option, and enables some
This still says --config...
> + recommended configuration values for `maintenance.<task>.schedule`. The
> + tasks that are enabled are safe for running in the background without
> + disrupting foreground processes.
> + "git maintenance register [--config-file <path>]",
> + char *config_file = NULL;
> struct option options[] = {
> + OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
> static char const * const builtin_maintenance_unregister_usage[] = {
> - "git maintenance unregister [--force]",
> + "git maintenance unregister [--config-file <path>] [--force]",
> + char *config_file = NULL;
> struct option options[] = {
> + OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
...but these have been updated. Easy to miss that doc update.
> - list = git_config_get_value_multi(key);
> - if (list) {
> - for_each_string_list_item(item, list) {
> - if (!strcmp(maintpath, item->string)) {
> - found = 1;
> - break;
> + if (!config_file) {
> + list = git_config_get_value_multi(key);
> + if (list) {
> + for_each_string_list_item(item, list) {
> + if (!strcmp(maintpath, item->string)) {
> + found = 1;
> + break;
> + }
> }
> }
> }
>
> - if (found) {
> + if (found || config_file) {
This seems like it will attempt to update the given config file
regardless of its contents. This might result in failures when the
file does not have that value, which is different than the typical
case.
I think the right thing to do would be to update the first
"if (!config_file)" block to have an else.
if (!config_file)
list = git_config_get_value_multi(key);
else
list = <get multi-value from the file>
if (list) {
for_each_string_list_item(item, list) {
...
Then the "if (found)" case can be the same.
> int rc;
> - char *user_config, *xdg_config;
> - git_global_config(&user_config, &xdg_config);
> - if (!user_config)
> - die(_("$HOME not set"));
> + char *user_config = NULL, *xdg_config = NULL;
> + if (!config_file) {
> + git_global_config(&user_config, &xdg_config);
> + config_file = user_config;
> + if (!user_config)
> + die(_("$HOME not set"));
> + }
> rc = git_config_set_multivar_in_file_gently(
> - user_config, key, NULL, maintpath,
> + config_file, key, NULL, maintpath,
> CONFIG_FLAGS_MULTI_REPLACE | CONFIG_FLAGS_FIXED_VALUE);
at least until this part that handles the config write.
> free(user_config);
> free(xdg_config);
> diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
> index 96bdd42045..091da683a8 100755
> --- a/t/t7900-maintenance.sh
> +++ b/t/t7900-maintenance.sh
> @@ -500,6 +500,21 @@ test_expect_success 'register and unregister' '
> git config --global --get-all maintenance.repo >actual &&
> test_cmp before actual &&
>
> + git config --file ./other --add maintenance.repo /existing1 &&
> + git config --file ./other --add maintenance.repo /existing2 &&
> + git config --file ./other --get-all maintenance.repo >before &&
> +
> + git maintenance register --config-file ./other &&
> + test_cmp_config false maintenance.auto &&
> + git config --file ./other --get-all maintenance.repo >between &&
> + cp before expect &&
> + pwd >>expect &&
> + test_cmp expect between &&
> +
> + git maintenance unregister --config-file ./other &&
> + git config --file ./other --get-all maintenance.repo >actual &&
> + test_cmp before actual &&
> +
Please add a case of `git maintenance unregister --config-file` where
the given file does not already have that repo listed to make sure we
cover that case.
Thanks,
-Stolee
next prev parent reply other threads:[~2022-11-09 15:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-08 19:49 [PATCH v2 0/2] git-maintenance quality-of-life improvements Ronan Pigott
2022-11-08 19:49 ` [PATCH v2 1/2] for-each-repo: interpolate repo path arguments Ronan Pigott
2022-11-08 19:49 ` [PATCH v2 2/2] maintenance: add option to register in a specific config Ronan Pigott
2022-11-08 20:38 ` Phillip Wood
2022-11-08 20:57 ` Taylor Blau
2022-11-08 21:28 ` Phillip Wood
2022-11-08 22:45 ` ronan
2022-11-09 15:05 ` Derrick Stolee [this message]
2022-11-10 2:38 ` Taylor Blau
2022-11-08 19:54 ` [PATCH v2 0/2] git-maintenance quality-of-life improvements Taylor Blau
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=df1d3485-3913-c132-83b5-09ca2408000b@github.com \
--to=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=me@ttaylor.com \
--cc=ronan@rjp.ie \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).