]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsmonitor: update documentation for hook version and watchman hooks
authorKevin Willford <Kevin.Willford@microsoft.com>
Thu, 23 Jan 2020 15:26:47 +0000 (15:26 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Jan 2020 23:10:23 +0000 (15:10 -0800)
A new config value for core.fsmonitorHookVersion was added to be able
to force the version of the fsmonitor hook.  Possible values are 1 or 2.
When this is not set the code will use a value of -1 and attempt to use
version 2 of the hook first and if that fails will attempt version 1.

Signed-off-by: Kevin Willford <Kevin.Willford@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/core.txt
Documentation/githooks.txt

index 9e440b160d9b3f0e1647f35996accc76e97984c7..74619a9c03bb17d0f6c007fc3f9b8c052b957c65 100644 (file)
@@ -68,6 +68,17 @@ core.fsmonitor::
        avoiding unnecessary processing of files that have not changed.
        See the "fsmonitor-watchman" section of linkgit:githooks[5].
 
+core.fsmonitorHookVersion::
+       Sets the version of hook that is to be used when calling fsmonitor.
+       There are currently versions 1 and 2. When this is not set,
+       version 2 will be tried first and if it fails then version 1
+       will be tried. Version 1 uses a timestamp as input to determine
+       which files have changes since that time but some monitors
+       like watchman have race conditions when used with a timestamp.
+       Version 2 uses an opaque string so that the monitor can return
+       something that can be used to determine what files have changed
+       without race conditions.
+
 core.trustctime::
        If false, the ctime differences between the index and the
        working tree are ignored; useful when the inode change time
index 50365f2914e04fe26969f00d3745e171375779db..3dccab53758717d6e7822d5cdfefd002864e9276 100644 (file)
@@ -490,9 +490,16 @@ fsmonitor-watchman
 ~~~~~~~~~~~~~~~~~~
 
 This hook is invoked when the configuration option `core.fsmonitor` is
-set to `.git/hooks/fsmonitor-watchman`.  It takes two arguments, a version
-(currently 1) and the time in elapsed nanoseconds since midnight,
-January 1, 1970.
+set to `.git/hooks/fsmonitor-watchman` or `.git/hooks/fsmonitor-watchmanv2`
+depending on the version of the hook to use.
+
+Version 1 takes two arguments, a version (1) and the time in elapsed
+nanoseconds since midnight, January 1, 1970.
+
+Version 2 takes two arguments, a version (2) and a token that is used
+for identifying changes since the token. For watchman this would be
+a clock id. This version must output to stdout the new token followed
+by a NUL before the list of files.
 
 The hook should output to stdout the list of all files in the working
 directory that may have changed since the requested time.  The logic