]> git.ipfire.org Git - thirdparty/git.git/commit - fsmonitor.c
fsmonitor: config settings are repository-specific
authorJeff Hostetler <jeffhost@microsoft.com>
Fri, 25 Mar 2022 18:02:46 +0000 (18:02 +0000)
committerJunio C Hamano <gitster@pobox.com>
Fri, 25 Mar 2022 23:04:15 +0000 (16:04 -0700)
commit1e0ea5c4316d2241dd76ef430a2779db9a097dfb
tree7c2aed530bcba080e9eea01515018b517f6edef5
parentd2bd862e7a4a791d88740cc81aad14cdcd90dd2c
fsmonitor: config settings are repository-specific

Move fsmonitor config settings to a new and opaque
`struct fsmonitor_settings` structure.  Add a lazily-loaded pointer
to this into `struct repo_settings`

Create an `enum fsmonitor_mode` type in `struct fsmonitor_settings` to
represent the state of fsmonitor.  This lets us represent which, if
any, fsmonitor provider (hook or IPC) is enabled.

Create `fsm_settings__get_*()` getters to lazily look up fsmonitor-
related config settings.

Get rid of the `core_fsmonitor` global variable.  Move the code to
lookup the existing `core.fsmonitor` config value into the fsmonitor
settings.

Create a hook pathname variable in `struct fsmonitor-settings` and
only set it when in hook mode.

Extend the definition of `core.fsmonitor` to be either a boolean
or a hook pathname.  When true, the builtin FSMonitor is used.
When false or unset, no FSMonitor (neither builtin nor hook) is
used.

The existing `core_fsmonitor` global variable was used to store the
pathname to the fsmonitor hook *and* it was used as a boolean to see
if fsmonitor was enabled.  This dual usage and global visibility leads
to confusion when we add the IPC-based provider.  So lets hide the
details in fsmonitor-settings.c and let it decide which provider to
use in the case of multiple settings.  This avoids cluttering up
repo-settings.c with these private details.

A future commit in builtin-fsmonitor series will add the ability to
disqualify worktrees for various reasons, such as being mounted from a
remote volume, where fsmonitor should not be started.  Having the
config settings hidden in fsmonitor-settings.c allows such worktree
restrictions to override the config values used.

Signed-off-by: Jeff Hostetler <jeffhost@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 files changed:
Makefile
builtin/update-index.c
cache.h
config.c
config.h
environment.c
fsmonitor-settings.c [new file with mode: 0644]
fsmonitor-settings.h [new file with mode: 0644]
fsmonitor.c
fsmonitor.h
repository.h
t/README