mirror of
https://github.com/git-for-windows/git.git
synced 2026-03-27 07:26:22 -05:00
fsmonitor: use IPC to query the builtin FSMonitor daemon
Use simple IPC to directly communicate with the new builtin file system monitor daemon when `core.useBuiltinFSMonitor` is set. The `core.fsmonitor` setting has already been defined as a HOOK pathname. Historically, this has been set to a HOOK script that will talk with Watchman. For compatibility reasons, we do not want to overload that definition (and cause problems if users have multiple versions of Git installed). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
This commit is contained in:
committed by
Johannes Schindelin
parent
81f7337e3d
commit
abc1c46df9
34
fsmonitor.c
34
fsmonitor.c
@@ -254,8 +254,37 @@ void refresh_fsmonitor(struct index_state *istate)
|
||||
trace_printf_key(&trace_fsmonitor, "refresh fsmonitor");
|
||||
|
||||
if (fsm_mode == FSMONITOR_MODE_IPC) {
|
||||
/* TODO */
|
||||
return;
|
||||
query_success = !fsmonitor_ipc__send_query(
|
||||
istate->fsmonitor_last_update ?
|
||||
istate->fsmonitor_last_update : "builtin:fake",
|
||||
&query_result);
|
||||
if (query_success) {
|
||||
/*
|
||||
* The response contains a series of nul terminated
|
||||
* strings. The first is the new token.
|
||||
*
|
||||
* Use `char *buf` as an interlude to trick the CI
|
||||
* static analysis to let us use `strbuf_addstr()`
|
||||
* here (and only copy the token) rather than
|
||||
* `strbuf_addbuf()`.
|
||||
*/
|
||||
buf = query_result.buf;
|
||||
strbuf_addstr(&last_update_token, buf);
|
||||
bol = last_update_token.len + 1;
|
||||
} else {
|
||||
/*
|
||||
* The builtin daemon is not available on this
|
||||
* platform -OR- we failed to get a response.
|
||||
*
|
||||
* Generate a fake token (rather than a V1
|
||||
* timestamp) for the index extension. (If
|
||||
* they switch back to the hook API, we don't
|
||||
* want ambiguous state.)
|
||||
*/
|
||||
strbuf_addstr(&last_update_token, "builtin:fake");
|
||||
}
|
||||
|
||||
goto apply_results;
|
||||
}
|
||||
|
||||
assert(fsm_mode == FSMONITOR_MODE_HOOK);
|
||||
@@ -321,6 +350,7 @@ void refresh_fsmonitor(struct index_state *istate)
|
||||
query_success ? "success" : "failure");
|
||||
}
|
||||
|
||||
apply_results:
|
||||
/* a fsmonitor process can return '/' to indicate all entries are invalid */
|
||||
if (query_success && query_result.buf[bol] != '/') {
|
||||
/* Mark all entries returned by the monitor as dirty */
|
||||
|
||||
Reference in New Issue
Block a user