In git repos with large working directories an external file system monitor (like fsmonitor or gvfs) can track what files in the working directory have been modified. This information can be used to speed up git operations that scale based on the size of the working directory so that they become O(# of modified files) vs O(# of files in the working directory).
The fsmonitor patch series added logic to limit what files git had to stat() to the set of modified files provided by the fsmonitor hook proc. It also used the untracked cache (if enabled) to limit the files/folders git had to scan looking for new/untracked files. GVFS is another external file system model that also speeds up git working directory based operations that has been using a different mechanism (programmatically generating an excludes file) to enable git to be O(# of modified files). This patch series will introduce a new way to limit git�s traversal of the working directory that does not require the untracked cache (fsmonitor) or using the excludes feature (GVFS). It does this by enhancing the existing excludes logic in dir.c to support a new �File System Excludes� or fsexcludes API that is better tuned to these programmatic applications. Base Ref: master Web-Diff: https://github.com/benpeart/git/commit/2ccbcd6360 Checkout: git fetch https://github.com/benpeart/git fsexcludes-v1 && git checkout 2ccbcd6360 Ben Peart (2): fsexcludes: add a programmatic way to exclude files from git's working directory traversal logic fsmonitor: switch to use new fsexcludes logic and remove unused untracked cache based logic Makefile | 1 + dir.c | 33 ++++-- dir.h | 2 - fsexcludes.c | 210 ++++++++++++++++++++++++++++++++++++ fsexcludes.h | 27 +++++ fsmonitor.c | 21 +--- fsmonitor.h | 10 +- t/t7519-status-fsmonitor.sh | 14 +-- 8 files changed, 270 insertions(+), 48 deletions(-) create mode 100644 fsexcludes.c create mode 100644 fsexcludes.h base-commit: 0b0cc9f86731f894cff8dd25299a9b38c254569e -- 2.17.0.windows.1