Skip to content

pr-git-1352/edecosta-mw/fsmonitor_linux-v4

Goal is to deliver fsmonitor for Linux that is on par with fsmonitor for
Windows and Mac OS.

This patch set builds upon previous work for done for Windows and Mac OS to
implement a fsmonitor back-end for Linux based on the Linux inotify API.
inotify differs significantly from the equivalent Windows and Mac OS APIs in
that a watch must be registered for every directory of interest (rather than
a singular watch at the root of the directory tree) and special care must be
taken to handle directory renames correctly.

More information about inotify:
https://man7.org/linux/man-pages/man7/inotify.7.html

v3 differs from v2:

 * Avoid potential entanglements with GPLv3
 * Classify a reasonable set of filesystems as being remote

v2 differs from v1:

 * Prior work for Windows and Mac OS has been merged to master, reducing the
   patch set from 12 to 6 patches
 * Code review feedback
 * Identified and resolved race condition revealed by CI test system, see
   "Limitations and caveats" regarding monitoring of directory trees from
   the man page, above
 * Apologies for being away from this for so long, but my attention was
   needed elsewhere

v1 differs from v0:

 * Code review feedback
 * Update how and which code can be shared between Mac OS and Linux
 * Increase polling frequency to every 1ms (matches Mac OS)
 * Updates to t7527 to improve test stability

Eric DeCosta (6):
  fsmonitor: prepare to share code between Mac OS and Linux
  fsmonitor: determine if filesystem is local or remote
  fsmonitor: implement filesystem change listener for Linux
  fsmonitor: enable fsmonitor for Linux
  fsmonitor: test updates
  fsmonitor: update doc for Linux

 Documentation/config/fsmonitor--daemon.txt |   4 +-
 Documentation/git-fsmonitor--daemon.txt    |  24 +-
 compat/fsmonitor/fsm-health-linux.c        |  24 +
 compat/fsmonitor/fsm-ipc-darwin.c          |  53 +-
 compat/fsmonitor/fsm-ipc-linux.c           |   1 +
 compat/fsmonitor/fsm-ipc-unix.c            |  52 ++
 compat/fsmonitor/fsm-listen-linux.c        | 676 +++++++++++++++++++++
 compat/fsmonitor/fsm-path-utils-linux.c    | 186 ++++++
 compat/fsmonitor/fsm-settings-darwin.c     |  63 +-
 compat/fsmonitor/fsm-settings-linux.c      |   1 +
 compat/fsmonitor/fsm-settings-unix.c       |  61 ++
 config.mak.uname                           |   8 +
 contrib/buildsystems/CMakeLists.txt        |  11 +-
 t/t7527-builtin-fsmonitor.sh               |  94 ++-
 14 files changed, 1119 insertions(+), 139 deletions(-)
 create mode 100644 compat/fsmonitor/fsm-health-linux.c
 create mode 100644 compat/fsmonitor/fsm-ipc-linux.c
 create mode 100644 compat/fsmonitor/fsm-ipc-unix.c
 create mode 100644 compat/fsmonitor/fsm-listen-linux.c
 create mode 100644 compat/fsmonitor/fsm-path-utils-linux.c
 create mode 100644 compat/fsmonitor/fsm-settings-linux.c
 create mode 100644 compat/fsmonitor/fsm-settings-unix.c

base-commit: 319605f8f00e402f3ea758a02c63534ff800a711

Submitted-As: https://lore.kernel.org/git/pull.1352.v4.git.git.1669230044.gitgitgadget@gmail.com
In-Reply-To: https://lore.kernel.org/git/pull.1352.git.git.1665326258.gitgitgadget@gmail.com
In-Reply-To: https://lore.kernel.org/git/pull.1352.v2.git.git.1665783944.gitgitgadget@gmail.com
In-Reply-To: https://lore.kernel.org/git/pull.1352.v3.git.git.1668641019.gitgitgadget@gmail.com
Assets 2