mirror of
https://github.com/git/git.git
synced 2024-12-12 03:14:11 +08: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.fsmonitor` is set to true. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1e0ea5c431
commit
9c307e8afd
38
fsmonitor.c
38
fsmonitor.c
@ -241,8 +241,41 @@ void refresh_fsmonitor(struct index_state *istate)
|
|||||||
trace_printf_key(&trace_fsmonitor, "refresh fsmonitor");
|
trace_printf_key(&trace_fsmonitor, "refresh fsmonitor");
|
||||||
|
|
||||||
if (fsm_mode == FSMONITOR_MODE_IPC) {
|
if (fsm_mode == FSMONITOR_MODE_IPC) {
|
||||||
/* TODO */
|
query_success = !fsmonitor_ipc__send_query(
|
||||||
return;
|
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;
|
||||||
|
is_trivial = query_result.buf[bol] == '/';
|
||||||
|
if (is_trivial)
|
||||||
|
trace2_data_intmax("fsm_client", NULL,
|
||||||
|
"query/trivial-response", 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);
|
assert(fsm_mode == FSMONITOR_MODE_HOOK);
|
||||||
@ -315,6 +348,7 @@ void refresh_fsmonitor(struct index_state *istate)
|
|||||||
query_success ? "success" : "failure");
|
query_success ? "success" : "failure");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
apply_results:
|
||||||
/*
|
/*
|
||||||
* The response from FSMonitor (excluding the header token) is
|
* The response from FSMonitor (excluding the header token) is
|
||||||
* either:
|
* either:
|
||||||
|
Loading…
Reference in New Issue
Block a user