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>
This commit is contained in:

committed by
Junio C Hamano

parent
6504cfd392
commit
de7e0b58ea
@ -106,6 +106,11 @@ static void log_flags_set(const char *path, const FSEventStreamEventFlags flag)
|
|||||||
strbuf_release(&msg);
|
strbuf_release(&msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ef_is_root_changed(const FSEventStreamEventFlags ef)
|
||||||
|
{
|
||||||
|
return (ef & kFSEventStreamEventFlagRootChanged);
|
||||||
|
}
|
||||||
|
|
||||||
static int ef_is_root_delete(const FSEventStreamEventFlags ef)
|
static int ef_is_root_delete(const FSEventStreamEventFlags ef)
|
||||||
{
|
{
|
||||||
return (ef & kFSEventStreamEventFlagItemIsDir &&
|
return (ef & kFSEventStreamEventFlagItemIsDir &&
|
||||||
@ -215,6 +220,26 @@ static void fsevent_callback(ConstFSEventStreamRef streamRef,
|
|||||||
continue;
|
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])) {
|
if (ef_ignore_xattr(event_flags[k])) {
|
||||||
trace_printf_key(&trace_fsmonitor,
|
trace_printf_key(&trace_fsmonitor,
|
||||||
"ignore-xattr: '%s', flags=0x%x",
|
"ignore-xattr: '%s', flags=0x%x",
|
||||||
|
Reference in New Issue
Block a user