Web lists-archives.com

[PATCH v1 0/2] fsexcludes: Add programmatic way to exclude files

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