diff options
| author | Matthew John Cheetham <mjcheetham@outlook.com> | 2022-08-18 21:40:51 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2022-08-18 21:35:32 -0700 |
| commit | 3f1917dc608021d7e94f4aaed9ecc9f58f9e32a4 (patch) | |
| tree | a42aedac912ddea3d15c6f78287a73ebb80496f0 | |
| parent | scalar: move config setting logic into its own function (diff) | |
| download | git-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.c | 30 | ||||
| -rwxr-xr-x | contrib/scalar/t/t9099-scalar.sh | 8 |
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 && |
