scalar unregister: stop FSMonitor daemon

Especially on Windows, we will need to stop that daemon, just in case
that the directory needs to be removed (the daemon would otherwise hold
a handle to that directory, preventing it from being deleted).

Helped-by: Junio C Hamano <gitster@pobox.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>
maint
Johannes Schindelin 2022-08-18 21:40:52 +00:00 committed by Junio C Hamano
parent 3f1917dc60
commit ec4c23116b
1 changed files with 13 additions and 0 deletions

View File

@ -244,6 +244,16 @@ static int start_fsmonitor_daemon(void)
return 0;
}

static int stop_fsmonitor_daemon(void)
{
assert(have_fsmonitor_support());

if (fsmonitor_ipc__get_state() == IPC_STATE__LISTENING)
return run_git("fsmonitor--daemon", "stop", NULL);

return 0;
}

static int register_dir(void)
{
if (add_or_remove_enlistment(1))
@ -468,6 +478,9 @@ static int delete_enlistment(struct strbuf *enlistment)
strbuf_release(&parent);
#endif

if (have_fsmonitor_support() && stop_fsmonitor_daemon())
return error(_("failed to stop the FSMonitor daemon"));

if (remove_dir_recursively(enlistment, 0))
return error(_("failed to delete enlistment directory"));