git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH v3 0/2] git-maintenance quality-of-life improvements
@ 2022-11-09 19:07 Ronan Pigott
  2022-11-09 19:07 ` [PATCH v3 1/2] for-each-repo: interpolate repo path arguments Ronan Pigott
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Ronan Pigott @ 2022-11-09 19:07 UTC (permalink / raw)
  To: git; +Cc: me, derrickstolee

This is a pair of quality-of-life patches for git-maintenance that have
helped me in my workflow. PTAL.

Changes in v2:
 - Added a test case for path interpolation in for-each-repo
 - Changed [--config <file>] to [--config-file <path>] in
   register/unregister
 - Dropped the short-name option, -c
 - Avoid finding the global config when the user has supplied the config
   on the command line

Changes in v3:
 - Report an error in unregister when the user specifies a config where
   the repo is not already registered
 - Add a test case for the above
 - Correct option description in the docs

Ronan Pigott (2):
  for-each-repo: interpolate repo path arguments
  maintenance: add option to register in a specific config

 Documentation/git-maintenance.txt | 14 +++++-----
 builtin/for-each-repo.c           |  5 +++-
 builtin/gc.c                      | 45 ++++++++++++++++++++++---------
 t/t0068-for-each-repo.sh          |  6 +++++
 t/t7900-maintenance.sh            | 21 ++++++++++++++-
 5 files changed, 69 insertions(+), 22 deletions(-)

-- 
2.38.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/2] for-each-repo: interpolate repo path arguments
  2022-11-09 19:07 [PATCH v3 0/2] git-maintenance quality-of-life improvements Ronan Pigott
@ 2022-11-09 19:07 ` Ronan Pigott
  2022-11-09 19:07 ` [PATCH v3 2/2] maintenance: add option to register in a specific config Ronan Pigott
  2022-11-09 21:25 ` [PATCH v3 0/2] git-maintenance quality-of-life improvements Taylor Blau
  2 siblings, 0 replies; 4+ messages in thread
From: Ronan Pigott @ 2022-11-09 19:07 UTC (permalink / raw)
  To: git; +Cc: me, derrickstolee

This is a quality of life change for git-maintenance, so repos can be
recorded with the tilde syntax. The register subcommand will not record
repos in this format by default.

Signed-off-by: Ronan Pigott <ronan@rjp.ie>
---
 builtin/for-each-repo.c  | 5 ++++-
 t/t0068-for-each-repo.sh | 6 ++++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/builtin/for-each-repo.c b/builtin/for-each-repo.c
index d45d873f57..6aeac37148 100644
--- a/builtin/for-each-repo.c
+++ b/builtin/for-each-repo.c
@@ -14,13 +14,16 @@ static int run_command_on_repo(const char *path, int argc, const char ** argv)
 {
 	int i;
 	struct child_process child = CHILD_PROCESS_INIT;
+	char *abspath = interpolate_path(path, 0);
 
 	child.git_cmd = 1;
-	strvec_pushl(&child.args, "-C", path, NULL);
+	strvec_pushl(&child.args, "-C", abspath, NULL);
 
 	for (i = 0; i < argc; i++)
 		strvec_push(&child.args, argv[i]);
 
+	free(abspath);
+
 	return run_command(&child);
 }
 
diff --git a/t/t0068-for-each-repo.sh b/t/t0068-for-each-repo.sh
index 4675e85251..c6e0d65563 100755
--- a/t/t0068-for-each-repo.sh
+++ b/t/t0068-for-each-repo.sh
@@ -8,9 +8,11 @@ test_expect_success 'run based on configured value' '
 	git init one &&
 	git init two &&
 	git init three &&
+	git init ~/four &&
 	git -C two commit --allow-empty -m "DID NOT RUN" &&
 	git config run.key "$TRASH_DIRECTORY/one" &&
 	git config --add run.key "$TRASH_DIRECTORY/three" &&
+	git config --add run.key "~/four" &&
 	git for-each-repo --config=run.key commit --allow-empty -m "ran" &&
 	git -C one log -1 --pretty=format:%s >message &&
 	grep ran message &&
@@ -18,12 +20,16 @@ test_expect_success 'run based on configured value' '
 	! grep ran message &&
 	git -C three log -1 --pretty=format:%s >message &&
 	grep ran message &&
+	git -C ~/four log -1 --pretty=format:%s >message &&
+	grep ran message &&
 	git for-each-repo --config=run.key -- commit --allow-empty -m "ran again" &&
 	git -C one log -1 --pretty=format:%s >message &&
 	grep again message &&
 	git -C two log -1 --pretty=format:%s >message &&
 	! grep again message &&
 	git -C three log -1 --pretty=format:%s >message &&
+	grep again message &&
+	git -C ~/four log -1 --pretty=format:%s >message &&
 	grep again message
 '
 
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v3 2/2] maintenance: add option to register in a specific config
  2022-11-09 19:07 [PATCH v3 0/2] git-maintenance quality-of-life improvements Ronan Pigott
  2022-11-09 19:07 ` [PATCH v3 1/2] for-each-repo: interpolate repo path arguments Ronan Pigott
@ 2022-11-09 19:07 ` Ronan Pigott
  2022-11-09 21:25 ` [PATCH v3 0/2] git-maintenance quality-of-life improvements Taylor Blau
  2 siblings, 0 replies; 4+ messages in thread
From: Ronan Pigott @ 2022-11-09 19:07 UTC (permalink / raw)
  To: git; +Cc: me, derrickstolee

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.

Signed-off-by: Ronan Pigott <ronan@rjp.ie>
---
 Documentation/git-maintenance.txt | 14 +++++-----
 builtin/gc.c                      | 45 ++++++++++++++++++++++---------
 t/t7900-maintenance.sh            | 21 ++++++++++++++-
 3 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.txt
index bb888690e4..805e5a2e3a 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.txt
@@ -50,13 +50,13 @@ stop::
 	the background maintenance is restarted later.
 
 register::
-	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 and enables some recommended configuration values for
-	`maintenance.<task>.schedule`. The tasks that are enabled are safe
-	for running in the background without disrupting foreground
-	processes.
+	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-file option, and enables some
+	recommended configuration values for `maintenance.<task>.schedule`. The
+	tasks that are enabled are safe for running in the background without
+	disrupting foreground processes.
 +
 The `register` subcommand will also set the `maintenance.strategy` config
 value to `incremental`, if this value is not previously set. The
diff --git a/builtin/gc.c b/builtin/gc.c
index 24ea85c7af..56b107e7f0 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -1454,13 +1454,15 @@ static char *get_maintpath(void)
 }
 
 static char const * const builtin_maintenance_register_usage[] = {
-	"git maintenance register",
+	"git maintenance register [--config-file <path>]",
 	NULL
 };
 
 static int maintenance_register(int argc, const char **argv, const char *prefix)
 {
+	char *config_file = NULL;
 	struct option options[] = {
+		OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
 		OPT_END(),
 	};
 	int found = 0;
@@ -1497,12 +1499,16 @@ static int maintenance_register(int argc, const char **argv, const char *prefix)
 
 	if (!found) {
 		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, "maintenance.repo", maintpath,
+			config_file, "maintenance.repo", maintpath,
 			CONFIG_REGEX_NONE, 0);
 		free(user_config);
 		free(xdg_config);
@@ -1517,14 +1523,16 @@ static int maintenance_register(int argc, const char **argv, const char *prefix)
 }
 
 static char const * const builtin_maintenance_unregister_usage[] = {
-	"git maintenance unregister [--force]",
+	"git maintenance unregister [--config-file <path>] [--force]",
 	NULL
 };
 
 static int maintenance_unregister(int argc, const char **argv, const char *prefix)
 {
 	int force = 0;
+	char *config_file = NULL;
 	struct option options[] = {
+		OPT_STRING(0, "config-file", &config_file, N_("file"), N_("use given config file")),
 		OPT__FORCE(&force,
 			   N_("return success even if repository was not registered"),
 			   PARSE_OPT_NOCOMPLETE),
@@ -1542,7 +1550,14 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
 		usage_with_options(builtin_maintenance_unregister_usage,
 				   options);
 
-	list = git_config_get_value_multi(key);
+	struct config_set cs;
+	if (config_file) {
+		git_configset_init(&cs);
+		git_configset_add_file(&cs, config_file);
+		list = git_configset_get_value_multi(&cs, key);
+	} else {
+		list = git_config_get_value_multi(key);
+	}
 	if (list) {
 		for_each_string_list_item(item, list) {
 			if (!strcmp(maintpath, item->string)) {
@@ -1554,12 +1569,15 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
 
 	if (found) {
 		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);
 		free(user_config);
 		free(xdg_config);
@@ -1572,6 +1590,7 @@ static int maintenance_unregister(int argc, const char **argv, const char *prefi
 		die(_("repository '%s' is not registered"), maintpath);
 	}
 
+	git_configset_clear(&cs);
 	free(maintpath);
 	return 0;
 }
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 96bdd42045..823331e44a 100755
--- a/t/t7900-maintenance.sh
+++ b/t/t7900-maintenance.sh
@@ -500,9 +500,28 @@ 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 &&
+
 	test_must_fail git maintenance unregister 2>err &&
 	grep "is not registered" err &&
-	git maintenance unregister --force
+	git maintenance unregister --force &&
+
+	test_must_fail git maintenance unregister --config-file ./other 2>err &&
+	grep "is not registered" err &&
+	git maintenance unregister --config-file ./other --force
 '
 
 test_expect_success !MINGW 'register and unregister with regex metacharacters' '
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 0/2] git-maintenance quality-of-life improvements
  2022-11-09 19:07 [PATCH v3 0/2] git-maintenance quality-of-life improvements Ronan Pigott
  2022-11-09 19:07 ` [PATCH v3 1/2] for-each-repo: interpolate repo path arguments Ronan Pigott
  2022-11-09 19:07 ` [PATCH v3 2/2] maintenance: add option to register in a specific config Ronan Pigott
@ 2022-11-09 21:25 ` Taylor Blau
  2 siblings, 0 replies; 4+ messages in thread
From: Taylor Blau @ 2022-11-09 21:25 UTC (permalink / raw)
  To: Ronan Pigott; +Cc: git, me, derrickstolee

Hi Ronan,

On Wed, Nov 09, 2022 at 12:07:06PM -0700, Ronan Pigott wrote:
> Changes in v3:
>  - Report an error in unregister when the user specifies a config where
>    the repo is not already registered
>  - Add a test case for the above
>  - Correct option description in the docs

Since this series is already in 'next', the existing patches are frozen
and won't be changed.

Would you mind re-submitting this as one or more patches on top of the
'rp/maintenance-qol' branch in my fork at
https://github.com/ttaylorr/git?

If you have any questions about how to do that, please feel free to
contact me off-list and I can give you a hand.

Thanks,
Taylor

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-11-09 21:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-09 19:07 [PATCH v3 0/2] git-maintenance quality-of-life improvements Ronan Pigott
2022-11-09 19:07 ` [PATCH v3 1/2] for-each-repo: interpolate repo path arguments Ronan Pigott
2022-11-09 19:07 ` [PATCH v3 2/2] maintenance: add option to register in a specific config Ronan Pigott
2022-11-09 21:25 ` [PATCH v3 0/2] git-maintenance quality-of-life improvements Taylor Blau

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).