diff options
author | Jeff Hostetler <jeffhost@microsoft.com> | 2022-05-26 23:47:13 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-05-27 00:59:27 +0200 |
commit | de7e0b58ea4bb1ca8242e677096dae50f96e9b7e (patch) | |
tree | a92c2aeb78da433a0815147d22957ef08171b70d /compat/fsmonitor | |
parent | fsm-health-win32: force shutdown daemon if worktree root moves (diff) | |
download | git-de7e0b58ea4bb1ca8242e677096dae50f96e9b7e.tar.xz git-de7e0b58ea4bb1ca8242e677096dae50f96e9b7e.zip |
fsm-listen-darwin: shutdown daemon if worktree root is moved/renamed
Teach the listener thread to shutdown the daemon if the spelling of the
worktree root directory changes.
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'compat/fsmonitor')
-rw-r--r-- | compat/fsmonitor/fsm-listen-darwin.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c index 07113205a6..83d38e8ac6 100644 --- a/compat/fsmonitor/fsm-listen-darwin.c +++ b/compat/fsmonitor/fsm-listen-darwin.c @@ -106,6 +106,11 @@ static void log_flags_set(const char *path, const FSEventStreamEventFlags flag) strbuf_release(&msg); } +static int ef_is_root_changed(const FSEventStreamEventFlags ef) +{ + return (ef & kFSEventStreamEventFlagRootChanged); +} + static int ef_is_root_delete(const FSEventStreamEventFlags ef) { return (ef & kFSEventStreamEventFlagItemIsDir && @@ -215,6 +220,26 @@ static void fsevent_callback(ConstFSEventStreamRef streamRef, continue; } + if (ef_is_root_changed(event_flags[k])) { + /* + * The spelling of the pathname of the root directory + * has changed. This includes the name of the root + * directory itself or of any parent directory in the + * path. + * + * (There may be other conditions that throw this, + * but I couldn't find any information on it.) + * + * Force a shutdown now and avoid things getting + * out of sync. The Unix domain socket is inside + * the .git directory and a spelling change will make + * it hard for clients to rendezvous with us. + */ + trace_printf_key(&trace_fsmonitor, + "event: root changed"); + goto force_shutdown; + } + if (ef_ignore_xattr(event_flags[k])) { trace_printf_key(&trace_fsmonitor, "ignore-xattr: '%s', flags=0x%x", |