aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew John Cheetham <mjcheetham@outlook.com>2022-08-18 21:40:51 +0000
committerJunio C Hamano <gitster@pobox.com>2022-08-18 21:35:32 -0700
commit3f1917dc608021d7e94f4aaed9ecc9f58f9e32a4 (patch)
treea42aedac912ddea3d15c6f78287a73ebb80496f0
parentscalar: move config setting logic into its own function (diff)
downloadgit-3f1917dc608021d7e94f4aaed9ecc9f58f9e32a4.tar.gz
git-3f1917dc608021d7e94f4aaed9ecc9f58f9e32a4.zip
scalar: enable built-in FSMonitor on `register`
Using the built-in FSMonitor makes many common commands quite a bit faster. So let's teach the `scalar register` command to enable the built-in FSMonitor and kick-start the fsmonitor--daemon process (for convenience). For simplicity, we only support the built-in FSMonitor (and no external file system monitor such as e.g. Watchman). Helped-by: Junio C Hamano <gitster@pobox.com> Helped-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Matthew John Cheetham <mjcheetham@outlook.com> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--contrib/scalar/scalar.c30
-rwxr-xr-xcontrib/scalar/t/t9099-scalar.sh8
2 files changed, 38 insertions, 0 deletions
diff --git a/contrib/scalar/scalar.c b/contrib/scalar/scalar.c
index 836a4c48fa..73cd5b1fd0 100644
--- a/contrib/scalar/scalar.c
+++ b/contrib/scalar/scalar.c
@@ -7,6 +7,9 @@
#include "parse-options.h"
#include "config.h"
#include "run-command.h"
+#include "simple-ipc.h"
+#include "fsmonitor-ipc.h"
+#include "fsmonitor-settings.h"
#include "refs.h"
#include "dir.h"
#include "packfile.h"
@@ -109,6 +112,12 @@ static int set_scalar_config(const struct scalar_config *config, int reconfigure
return res;
}
+static int have_fsmonitor_support(void)
+{
+ return fsmonitor_ipc__is_supported() &&
+ fsm_settings__get_reason(the_repository) == FSMONITOR_REASON_OK;
+}
+
static int set_recommended_config(int reconfigure)
{
struct scalar_config config[] = {
@@ -170,6 +179,13 @@ static int set_recommended_config(int reconfigure)
config[i].key, config[i].value);
}
+ if (have_fsmonitor_support()) {
+ struct scalar_config fsmonitor = { "core.fsmonitor", "true" };
+ if (set_scalar_config(&fsmonitor, reconfigure))
+ return error(_("could not configure %s=%s"),
+ fsmonitor.key, fsmonitor.value);
+ }
+
/*
* The `log.excludeDecoration` setting is special because it allows
* for multiple values.
@@ -218,6 +234,16 @@ static int add_or_remove_enlistment(int add)
"scalar.repo", the_repository->worktree, NULL);
}
+static int start_fsmonitor_daemon(void)
+{
+ assert(have_fsmonitor_support());
+
+ if (fsmonitor_ipc__get_state() != IPC_STATE__LISTENING)
+ return run_git("fsmonitor--daemon", "start", NULL);
+
+ return 0;
+}
+
static int register_dir(void)
{
if (add_or_remove_enlistment(1))
@@ -229,6 +255,10 @@ static int register_dir(void)
if (toggle_maintenance(1))
return error(_("could not turn on maintenance"));
+ if (have_fsmonitor_support() && start_fsmonitor_daemon()) {
+ return error(_("could not start the FSMonitor daemon"));
+ }
+
return 0;
}
diff --git a/contrib/scalar/t/t9099-scalar.sh b/contrib/scalar/t/t9099-scalar.sh
index c069cffebf..365eab9b54 100755
--- a/contrib/scalar/t/t9099-scalar.sh
+++ b/contrib/scalar/t/t9099-scalar.sh
@@ -102,6 +102,14 @@ test_expect_success 'scalar enlistments need a worktree' '
grep "Scalar enlistments require a worktree" err
'
+test_expect_success FSMONITOR_DAEMON 'scalar register starts fsmon daemon' '
+ git init test/src &&
+ test_must_fail git -C test/src fsmonitor--daemon status &&
+ scalar register test/src &&
+ git -C test/src fsmonitor--daemon status &&
+ test_cmp_config -C test/src true core.fsmonitor
+'
+
test_expect_success 'scalar unregister' '
git init vanish/src &&
scalar register vanish/src &&