git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Derrick Stolee" <stolee@gmail.com>,
	"Eric Sunshine" <sunshine@sunshineco.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Elijah Newren" <newren@gmail.com>,
	"Bagas Sanjaya" <bagasdotme@gmail.com>,
	"Johannes Schindelin" <johannes.schindelin@gmx.de>,
	"Derrick Stolee" <dstolee@microsoft.com>
Subject: [PATCH v4 04/15] scalar: 'register' sets recommended config and starts maintenance
Date: Tue, 14 Sep 2021 14:39:05 +0000	[thread overview]
Message-ID: <bbbc4c3339043bcd718dd2defcbaaaac2092227a.1631630356.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1005.v4.git.1631630356.gitgitgadget@gmail.com>

From: Derrick Stolee <dstolee@microsoft.com>

Let's start implementing the `register` command. With this commit,
recommended settings are configured upon `scalar register`, and Git's
background maintenance is started.

The recommended config settings may very well change in the future. For
example, once the built-in FSMonitor is available, we will want to
enable it upon `scalar register`. For that reason, we explicitly support
running `scalar register` in an already-registered enlistment.

Co-authored-by: Victoria Dye <vdye@github.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 contrib/scalar/scalar.c   | 255 ++++++++++++++++++++++++++++++++++++++
 contrib/scalar/scalar.txt |  18 ++-
 2 files changed, 272 insertions(+), 1 deletion(-)

diff --git a/contrib/scalar/scalar.c b/contrib/scalar/scalar.c
index 7cff29e0fcd..0e627bb100e 100644
--- a/contrib/scalar/scalar.c
+++ b/contrib/scalar/scalar.c
@@ -5,11 +5,266 @@
 #include "cache.h"
 #include "gettext.h"
 #include "parse-options.h"
+#include "config.h"
+#include "run-command.h"
+
+/*
+ * Remove the deepest subdirectory in the provided path string. Path must not
+ * include a trailing path separator. Returns 1 if parent directory found,
+ * otherwise 0.
+ */
+static int strbuf_parent_directory(struct strbuf *buf)
+{
+	size_t len = buf->len;
+	size_t offset = offset_1st_component(buf->buf);
+	char *path_sep = find_last_dir_sep(buf->buf + offset);
+	strbuf_setlen(buf, path_sep ? path_sep - buf->buf : offset);
+
+	return buf->len < len;
+}
+
+static void setup_enlistment_directory(int argc, const char **argv,
+				       const char * const *usagestr,
+				       const struct option *options,
+				       struct strbuf *enlistment_root)
+{
+	struct strbuf path = STRBUF_INIT;
+	char *root;
+	int enlistment_found = 0;
+
+	if (startup_info->have_repository)
+		BUG("gitdir already set up?!?");
+
+	if (argc > 1)
+		usage_with_options(usagestr, options);
+
+	/* find the worktree, determine its corresponding root */
+	if (argc == 1)
+		strbuf_add_absolute_path(&path, argv[0]);
+	else if (strbuf_getcwd(&path) < 0)
+		die(_("need a working directory"));
+
+	strbuf_trim_trailing_dir_sep(&path);
+	do {
+		const size_t len = path.len;
+
+		/* check if currently in enlistment root with src/ workdir */
+		strbuf_addstr(&path, "/src/.git");
+		if (is_git_directory(path.buf)) {
+			strbuf_strip_suffix(&path, "/.git");
+
+			if (enlistment_root)
+				strbuf_add(enlistment_root, path.buf, len);
+
+			enlistment_found = 1;
+			break;
+		}
+
+		/* reset to original path */
+		strbuf_setlen(&path, len);
+
+		/* check if currently in workdir */
+		strbuf_addstr(&path, "/.git");
+		if (is_git_directory(path.buf)) {
+			strbuf_setlen(&path, len);
+
+			if (enlistment_root) {
+				/*
+				 * If the worktree's directory's name is `src`, the enlistment is the
+				 * parent directory, otherwise it is identical to the worktree.
+				 */
+				root = strip_path_suffix(path.buf, "src");
+				strbuf_addstr(enlistment_root, root ? root : path.buf);
+				free(root);
+			}
+
+			enlistment_found = 1;
+			break;
+		}
+
+		strbuf_setlen(&path, len);
+	} while (strbuf_parent_directory(&path));
+
+	if (!enlistment_found)
+		die(_("could not find enlistment root"));
+
+	if (chdir(path.buf) < 0)
+		die_errno(_("could not switch to '%s'"), path.buf);
+
+	strbuf_release(&path);
+	setup_git_directory();
+}
+
+static int run_git(const char *arg, ...)
+{
+	struct strvec argv = STRVEC_INIT;
+	va_list args;
+	const char *p;
+	int res;
+
+	va_start(args, arg);
+	strvec_push(&argv, arg);
+	while ((p = va_arg(args, const char *)))
+		strvec_push(&argv, p);
+	va_end(args);
+
+	res = run_command_v_opt(argv.v, RUN_GIT_CMD);
+
+	strvec_clear(&argv);
+	return res;
+}
+
+static int set_recommended_config(void)
+{
+	struct {
+		const char *key;
+		const char *value;
+	} config[] = {
+		{ "am.keepCR", "true" },
+		{ "core.FSCache", "true" },
+		{ "core.multiPackIndex", "true" },
+		{ "core.preloadIndex", "true" },
+#ifndef WIN32
+		{ "core.untrackedCache", "true" },
+#else
+		/*
+		 * Unfortunately, Scalar's Functional Tests demonstrated
+		 * that the untracked cache feature is unreliable on Windows
+		 * (which is a bummer because that platform would benefit the
+		 * most from it). For some reason, freshly created files seem
+		 * not to update the directory's `lastModified` time
+		 * immediately, but the untracked cache would need to rely on
+		 * that.
+		 *
+		 * Therefore, with a sad heart, we disable this very useful
+		 * feature on Windows.
+		 */
+		{ "core.untrackedCache", "false" },
+#endif
+		{ "core.logAllRefUpdates", "true" },
+		{ "credential.https://dev.azure.com.useHttpPath", "true" },
+		{ "credential.validate", "false" }, /* GCM4W-only */
+		{ "gc.auto", "0" },
+		{ "gui.GCWarning", "false" },
+		{ "index.threads", "true" },
+		{ "index.version", "4" },
+		{ "merge.stat", "false" },
+		{ "merge.renames", "false" },
+		{ "pack.useBitmaps", "false" },
+		{ "pack.useSparse", "true" },
+		{ "receive.autoGC", "false" },
+		{ "reset.quiet", "true" },
+		{ "feature.manyFiles", "false" },
+		{ "feature.experimental", "false" },
+		{ "fetch.unpackLimit", "1" },
+		{ "fetch.writeCommitGraph", "false" },
+#ifdef WIN32
+		{ "http.sslBackend", "schannel" },
+#endif
+		{ "status.aheadBehind", "false" },
+		{ "commitGraph.generationVersion", "1" },
+		{ "core.autoCRLF", "false" },
+		{ "core.safeCRLF", "false" },
+		{ NULL, NULL },
+	};
+	int i;
+	char *value;
+
+	for (i = 0; config[i].key; i++) {
+		if (git_config_get_string(config[i].key, &value)) {
+			trace2_data_string("scalar", the_repository, config[i].key, "created");
+			if (git_config_set_gently(config[i].key,
+						  config[i].value) < 0)
+				return error(_("could not configure %s=%s"),
+					     config[i].key, config[i].value);
+		} else {
+			trace2_data_string("scalar", the_repository, config[i].key, "exists");
+			free(value);
+		}
+	}
+
+	/*
+	 * The `log.excludeDecoration` setting is special because it allows
+	 * for multiple values.
+	 */
+	if (git_config_get_string("log.excludeDecoration", &value)) {
+		trace2_data_string("scalar", the_repository,
+				   "log.excludeDecoration", "created");
+		if (git_config_set_multivar_gently("log.excludeDecoration",
+						   "refs/prefetch/*",
+						   CONFIG_REGEX_NONE, 0))
+			return error(_("could not configure "
+				       "log.excludeDecoration"));
+	} else {
+		trace2_data_string("scalar", the_repository,
+				   "log.excludeDecoration", "exists");
+		free(value);
+	}
+
+	return 0;
+}
+
+static int start_maintenance(void)
+{
+	return run_git("maintenance", "start", NULL);
+}
+
+static int add_enlistment(void)
+{
+	int res;
+
+	if (!the_repository->worktree)
+		die(_("Scalar enlistments require a worktree"));
+
+	res = run_git("config", "--global", "--get", "--fixed-value",
+		      "scalar.repo", the_repository->worktree, NULL);
+
+	/*
+	 * If the setting is already there, then do nothing.
+	 */
+	if (!res)
+		return 0;
+
+	return run_git("config", "--global", "--add",
+		       "scalar.repo", the_repository->worktree, NULL);
+}
+
+static int register_dir(void)
+{
+	int res = add_enlistment();
+
+	if (!res)
+		res = set_recommended_config();
+
+	if (!res)
+		res = start_maintenance();
+
+	return res;
+}
+
+static int cmd_register(int argc, const char **argv)
+{
+	struct option options[] = {
+		OPT_END(),
+	};
+	const char * const usage[] = {
+		N_("scalar register [<enlistment>]"),
+		NULL
+	};
+
+	argc = parse_options(argc, argv, NULL, options,
+			     usage, 0);
+
+	setup_enlistment_directory(argc, argv, usage, options, NULL);
+
+	return register_dir();
+}
 
 static struct {
 	const char *name;
 	int (*fn)(int, const char **);
 } builtins[] = {
+	{ "register", cmd_register },
 	{ NULL, NULL},
 };
 
diff --git a/contrib/scalar/scalar.txt b/contrib/scalar/scalar.txt
index 5f7131861a5..568987064b2 100644
--- a/contrib/scalar/scalar.txt
+++ b/contrib/scalar/scalar.txt
@@ -8,7 +8,7 @@ scalar - an opinionated repository management tool
 SYNOPSIS
 --------
 [verse]
-scalar <command> [<options>]
+scalar register [<enlistment>]
 
 DESCRIPTION
 -----------
@@ -29,6 +29,22 @@ will be identical to the worktree.
 The `scalar` command implements various subcommands, and different options
 depending on the subcommand.
 
+COMMANDS
+--------
+
+Register
+~~~~~~~~
+
+register [<enlistment>]::
+	Adds the enlistment's repository to the list of registered repositories
+	and starts background maintenance. If `<enlistment>` is not provided,
+	then the enlistment associated with the current working directory is
+	registered.
++
+Note: when this subcommand is called in a worktree that is called `src/`, its
+parent directory is considered to be the Scalar enlistment. If the worktree is
+_not_ called `src/`, it itself will be considered to be the Scalar enlistment.
+
 SEE ALSO
 --------
 linkgit:git-maintenance[1].
-- 
gitgitgadget


  parent reply	other threads:[~2021-09-14 14:43 UTC|newest]

Thread overview: 303+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-30 21:34 [PATCH 00/15] [RFC] Upstreaming the Scalar command Johannes Schindelin via GitGitGadget
2021-08-30 21:34 ` [PATCH 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-08-30 21:34 ` [PATCH 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-08-30 21:34 ` [PATCH 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-08-31  8:15   ` Ævar Arnfjörð Bjarmason
2021-08-30 21:34 ` [PATCH 04/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-08-31  8:11   ` Ævar Arnfjörð Bjarmason
2021-08-31 14:22     ` Derrick Stolee
2021-09-01 16:16   ` Junio C Hamano
2021-09-03 15:41     ` Johannes Schindelin
2021-09-03 17:35       ` Junio C Hamano
2021-08-30 21:34 ` [PATCH 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-08-30 21:34 ` [PATCH 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-08-30 21:34 ` [PATCH 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-08-30 21:34 ` [PATCH 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-08-31  8:23   ` Ævar Arnfjörð Bjarmason
2021-08-31 16:47     ` Eric Sunshine
2021-09-03 15:21       ` Johannes Schindelin
2021-09-01 16:45   ` Junio C Hamano
2021-09-03 12:30     ` Derrick Stolee
2021-09-03 17:18       ` Junio C Hamano
2021-09-03 15:20     ` Johannes Schindelin
2021-09-03 17:29       ` Junio C Hamano
2021-09-08 18:59         ` Johannes Schindelin
2021-09-09 10:29           ` Ævar Arnfjörð Bjarmason
2021-09-28  5:19   ` Elijah Newren
2021-10-06 20:40     ` Johannes Schindelin
2021-10-07 14:09       ` Elijah Newren
2021-08-30 21:34 ` [PATCH 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-08-30 21:34 ` [PATCH 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-08-31  8:27   ` Ævar Arnfjörð Bjarmason
2021-09-03 15:50     ` Johannes Schindelin
2021-09-03 17:49       ` Junio C Hamano
2021-09-08 19:11         ` Johannes Schindelin
2021-08-30 21:34 ` [PATCH 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-08-31  8:29   ` Ævar Arnfjörð Bjarmason
2021-09-03 15:53     ` Johannes Schindelin
2021-09-06  1:01       ` Ævar Arnfjörð Bjarmason
2021-08-30 21:34 ` [PATCH 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-08-31  6:19   ` Eric Sunshine
2021-09-03 15:23     ` Johannes Schindelin
2021-09-03 17:02       ` Eric Sunshine
2021-09-08 18:21         ` Johannes Schindelin
2021-08-30 21:34 ` [PATCH 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-08-30 21:34 ` [PATCH 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-08-31  6:24   ` Eric Sunshine
2021-09-03 15:24     ` Johannes Schindelin
2021-08-30 21:34 ` [PATCH 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-08-31  8:32   ` Ævar Arnfjörð Bjarmason
2021-08-31 14:30     ` Derrick Stolee
2021-08-31 14:52       ` Ævar Arnfjörð Bjarmason
2021-08-31  0:51 ` [PATCH 00/15] [RFC] Upstreaming the Scalar command Derrick Stolee
2021-09-01 15:00   ` Elijah Newren
2021-09-03 17:54 ` [PATCH v2 " Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-09-14 10:47     ` Ævar Arnfjörð Bjarmason
2021-09-03 17:54   ` [PATCH v2 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 04/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-09-04  8:58     ` Bagas Sanjaya
2021-09-08 19:11       ` Johannes Schindelin
2021-09-03 17:54   ` [PATCH v2 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-09-06  1:12     ` Ævar Arnfjörð Bjarmason
2021-09-08 19:23       ` Johannes Schindelin
2021-09-03 17:54   ` [PATCH v2 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-09-03 17:54   ` [PATCH v2 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-09-06  0:59   ` [PATCH v2 00/15] [RFC] Upstreaming the Scalar command Ævar Arnfjörð Bjarmason
2021-09-08 19:24   ` [PATCH v3 " Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-09-09 15:36       ` Elijah Newren
2021-09-13 13:32         ` Johannes Schindelin
2021-09-08 19:24     ` [PATCH v3 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 04/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-09-09  6:11       ` Bagas Sanjaya
2021-09-08 19:24     ` [PATCH v3 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-09-08 19:24     ` [PATCH v3 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-09-09 10:14     ` [PATCH v3 00/15] [RFC] Upstreaming the Scalar command Ævar Arnfjörð Bjarmason
2021-09-13 14:20       ` Ævar Arnfjörð Bjarmason
2021-09-13 20:53         ` Johannes Schindelin
2021-09-14 10:59           ` Ævar Arnfjörð Bjarmason
2021-09-14 14:24             ` Train station analogy, was " Johannes Schindelin
2021-09-14 17:29               ` Junio C Hamano
2021-09-14 18:09                 ` Ævar Arnfjörð Bjarmason
2021-09-14 20:35                   ` Derrick Stolee
2021-09-14 23:22                     ` Theodore Ts'o
2021-09-15 17:51                     ` Ævar Arnfjörð Bjarmason
2021-09-14 21:49                 ` Junio C Hamano
2021-10-06 20:09                   ` Johannes Schindelin
2021-10-06 20:25                     ` Junio C Hamano
2021-10-07 10:58                       ` Johannes Schindelin
2021-10-07  1:03                     ` Ævar Arnfjörð Bjarmason
2021-09-14 18:25               ` Ævar Arnfjörð Bjarmason
2021-09-14 14:39     ` [PATCH v4 00/15] " Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-09-24 12:52         ` Ævar Arnfjörð Bjarmason
2021-09-24 17:54           ` Junio C Hamano
2021-09-26 19:15             ` Ævar Arnfjörð Bjarmason
2021-09-27 20:32               ` Junio C Hamano
2021-09-14 14:39       ` [PATCH v4 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` Derrick Stolee via GitGitGadget [this message]
2021-09-28  5:01         ` [PATCH v4 04/15] scalar: 'register' sets recommended config and starts maintenance Elijah Newren
2021-09-28  7:27           ` Ævar Arnfjörð Bjarmason
2021-10-06 20:32           ` Johannes Schindelin
2021-09-28  5:05         ` Elijah Newren
2021-10-06 20:38           ` Johannes Schindelin
2021-09-14 14:39       ` [PATCH v4 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-09-28  5:24         ` Elijah Newren
2021-10-06 20:43           ` Johannes Schindelin
2021-09-14 14:39       ` [PATCH v4 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-09-28  6:24         ` Elijah Newren
     [not found]           ` <468CE4B8-D2C9-4FBC-B801-739F86C88ACB@outlook.com>
2021-10-06 20:48             ` Johannes Schindelin
2021-09-14 14:39       ` [PATCH v4 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-09-14 14:39       ` [PATCH v4 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-09-14 15:10       ` [PATCH v4 00/15] Upstreaming the Scalar command Johannes Schindelin
2021-09-14 17:51         ` Junio C Hamano
2021-10-07 10:58       ` [PATCH v5 " Johannes Schindelin via GitGitGadget
2021-10-07 10:58         ` [PATCH v5 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-10-07 10:58         ` [PATCH v5 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-10-07 10:58         ` [PATCH v5 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-10-07 10:58         ` [PATCH v5 04/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-10-07 10:58         ` [PATCH v5 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-10-07 10:59         ` [PATCH v5 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-10-07 11:28         ` [PATCH v5 00/15] Upstreaming the Scalar command Ævar Arnfjörð Bjarmason
2021-10-27  8:27         ` [PATCH v6 " Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 01/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 02/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 03/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 04/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 05/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 06/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 07/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 08/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 09/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 10/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 11/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 12/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 13/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 14/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-10-27  8:27           ` [PATCH v6 15/15] scalar: accept -C and -c options before the subcommand Johannes Schindelin via GitGitGadget
2021-10-27 21:57           ` [PATCH v6 00/15] Upstreaming the Scalar command Derrick Stolee
2021-11-17 14:19           ` [PATCH v7 00/17] " Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 01/17] scalar: add a README with a roadmap Johannes Schindelin via GitGitGadget
2021-11-17 15:40               ` Derrick Stolee
2021-11-18 13:51                 ` Johannes Schindelin
2021-11-17 14:19             ` [PATCH v7 02/17] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 03/17] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 04/17] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 05/17] cmake: optionally build `scalar`, too Johannes Schindelin via GitGitGadget
2021-11-17 21:12               ` Matt Rogers
2021-11-18 13:32                 ` Johannes Schindelin
2021-11-17 14:19             ` [PATCH v7 06/17] ci: also run the `scalar` tests Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 07/17] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 08/17] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 09/17] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 10/17] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 11/17] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 12/17] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 13/17] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 14/17] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 15/17] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 16/17] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-11-17 14:19             ` [PATCH v7 17/17] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-11-18 14:11             ` [PATCH v7 00/17] Upstreaming the Scalar command Ævar Arnfjörð Bjarmason
2021-11-19 23:03             ` [PATCH v8 " Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 01/17] scalar: add a README with a roadmap Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 02/17] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 03/17] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 04/17] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-11-30 13:27                 ` Ævar Arnfjörð Bjarmason
2021-11-19 23:03               ` [PATCH v8 05/17] cmake: optionally build `scalar`, too Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 06/17] ci: also run the `scalar` tests Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 07/17] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 08/17] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 09/17] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 10/17] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 11/17] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 12/17] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 13/17] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 14/17] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 15/17] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 16/17] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-11-19 23:03               ` [PATCH v8 17/17] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-11-20 17:22               ` [PATCH v8 00/17] Upstreaming the Scalar command Elijah Newren
2021-11-22 12:21                 ` Johannes Schindelin
2021-11-22 16:36                   ` Ævar Arnfjörð Bjarmason
2021-11-22 22:08                     ` Johannes Schindelin
2021-11-22 23:29                       ` Ævar Arnfjörð Bjarmason
2021-11-23 11:52                         ` Johannes Schindelin
2021-11-23 12:45                           ` Ævar Arnfjörð Bjarmason
2021-11-23 13:05                             ` Johannes Schindelin
2021-11-30 11:54               ` [PATCH v9 " Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 01/17] scalar: add a README with a roadmap Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 02/17] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 03/17] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 04/17] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 05/17] cmake: optionally build `scalar`, too Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 06/17] ci: also run the `scalar` tests Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 07/17] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 08/17] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 09/17] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 10/17] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 11/17] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 12/17] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 13/17] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 14/17] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 15/17] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 16/17] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-11-30 11:54                 ` [PATCH v9 17/17] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-11-30 12:16                 ` [PATCH v9 00/17] Upstreaming the Scalar command Ævar Arnfjörð Bjarmason
2021-11-30 14:11                   ` Johannes Schindelin
2021-11-30 14:50                     ` Ævar Arnfjörð Bjarmason
2021-12-01 17:58                     ` Junio C Hamano
2021-12-02 14:53                       ` Johannes Schindelin
2021-12-02 17:03                         ` Junio C Hamano
2021-12-02 17:39                           ` Elijah Newren
2021-12-02 18:42                             ` Junio C Hamano
2021-12-08 11:26                               ` Johannes Schindelin
2021-12-09  4:02                                 ` Junio C Hamano
2021-12-03 13:34                 ` [PATCH v10 00/15] " Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 01/15] scalar: add a README with a roadmap Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 02/15] scalar: create a rudimentary executable Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 03/15] scalar: start documenting the command Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 04/15] scalar: create test infrastructure Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 05/15] scalar: 'register' sets recommended config and starts maintenance Derrick Stolee via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 06/15] scalar: 'unregister' stops background maintenance Derrick Stolee via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 07/15] scalar: let 'unregister' handle a deleted enlistment directory gracefully Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 08/15] scalar: implement 'scalar list' Derrick Stolee via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 09/15] scalar: implement the `clone` subcommand Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 10/15] scalar: teach 'clone' to support the --single-branch option Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 11/15] scalar: implement the `run` command Derrick Stolee via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 12/15] scalar: allow reconfiguring an existing enlistment Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 13/15] scalar: teach 'reconfigure' to optionally handle all registered enlistments Johannes Schindelin via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 14/15] scalar: implement the `delete` command Matthew John Cheetham via GitGitGadget
2021-12-03 13:34                   ` [PATCH v10 15/15] scalar: implement the `version` command Johannes Schindelin via GitGitGadget
2021-12-03 15:48                   ` [PATCH v10 00/15] Upstreaming the Scalar command Elijah Newren
2021-12-05 10:02                     ` Junio C Hamano
2021-12-07 20:05                       ` Ævar Arnfjörð Bjarmason
2021-12-08 19:55                         ` Junio C Hamano
2021-12-08 20:04                           ` [RFC/PATCH] Makefile: add test-all target Junio C Hamano
2021-12-08 21:30                             ` Derrick Stolee
2021-12-08 22:22                               ` Junio C Hamano
2021-12-08 21:52                             ` Jeff King
2021-12-08 22:25                               ` Junio C Hamano
2021-12-09 17:57                               ` Junio C Hamano
2021-12-10  8:37                                 ` Jeff King
2021-12-13  9:12                                   ` Junio C Hamano
2021-12-09  3:44                             ` Ævar Arnfjörð Bjarmason
2021-12-09 18:12                               ` Junio C Hamano
2021-12-10  2:38                                 ` Ævar Arnfjörð Bjarmason
2021-12-10  8:50                                   ` Jeff King
2021-12-10  9:30                                     ` Ævar Arnfjörð Bjarmason
2021-12-10 23:43                                     ` Johannes Schindelin
2021-12-10 23:27                                 ` Elijah Newren
2021-12-13  9:12                                   ` Junio C Hamano
2021-12-10 23:14                             ` Johannes Schindelin
2021-12-13  8:42                               ` Junio C Hamano
2021-12-14 13:16                                 ` Jeff King
2021-12-14 13:18                                   ` Jeff King
2021-12-11 11:08                             ` Bagas Sanjaya
2021-12-08 11:15                       ` [PATCH v10 00/15] Upstreaming the Scalar command Johannes Schindelin
2021-12-08 13:04                         ` Ævar Arnfjörð Bjarmason
2021-12-08 14:17                         ` Derrick Stolee
2021-12-08 18:29                         ` Elijah Newren
2021-12-09  3:52                         ` Junio C Hamano
2021-12-11  0:29                           ` Johannes Schindelin
2021-12-11  1:07                             ` Ævar Arnfjörð Bjarmason
2021-12-11  5:15                             ` Elijah Newren
2021-12-11 13:46                               ` Johannes Schindelin

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=bbbc4c3339043bcd718dd2defcbaaaac2092227a.1631630356.git.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=avarab@gmail.com \
    --cc=bagasdotme@gmail.com \
    --cc=dstolee@microsoft.com \
    --cc=git@vger.kernel.org \
    --cc=johannes.schindelin@gmx.de \
    --cc=newren@gmail.com \
    --cc=stolee@gmail.com \
    --cc=sunshine@sunshineco.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.
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).