diff options
author | Jeff Hostetler <jeffhost@microsoft.com> | 2022-03-25 18:03:12 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-03-25 16:04:17 -0700 |
commit | 26b9f34ab32b66a6387dc5ab3c773d3d4cd86685 (patch) | |
tree | e3ddbec77f7613d8222cf1fc53f9d9f577524b4e /t/t6436-merge-overwrite.sh | |
parent | fsmonitor--daemon: use a cookie file to sync with file system (diff) | |
download | tgif-26b9f34ab32b66a6387dc5ab3c773d3d4cd86685.tar.xz |
fsmonitor: force update index after large responses
Measure the time taken to apply the FSMonitor query result
to the index and the untracked-cache.
Set the `FSMONITOR_CHANGED` bit on `istate->cache_changed` when
FSMonitor returns a very large repsonse to ensure that the index is
written to disk.
Normally, when the FSMonitor response includes a tracked file, the
index is always updated. Similarly, the index might be updated when
the response alters the untracked-cache (when enabled). However, in
cases where neither of those cause the index to be considered changed,
the FSMonitor response is wasted. Subsequent Git commands will make
requests with the same token and receive the same response.
If that response is very large, performance may suffer. It would be
more efficient to force update the index now (and the token in the
index extension) in order to reduce the size of the response received
by future commands.
This was observed on Windows after a large checkout. On Windows, the
kernel emits events for the files that are changed as they are
changed. However, it might delay events for the containing
directories until the system is more idle (or someone scans the
directory (so it seems)). The first status following a checkout would
get the list of files. The subsequent status commands would get the
list of directories as the events trickled out. But they would never
catch up because the token was not advanced because the index wasn't
updated.
This list of directories caused `wt_status_collect_untracked()` to
unnecessarily spend time actually scanning them during each command.
Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t6436-merge-overwrite.sh')
0 files changed, 0 insertions, 0 deletions