On 5/15/2017 3:50 PM, David Turner wrote:
-----Original Message----- From: Ben Peart [mailto:[email protected]] Sent: Monday, May 15, 2017 3:14 PM To: [email protected] Cc: [email protected]; [email protected]; [email protected]; [email protected]; David Turner <[email protected]>; [email protected] Subject: [PATCH v1 5/5] Add a sample query-fsmonitor hook script that integrates with the cross platform Watchman file watching service. To use the script: Download and install Watchman from https://facebook.github.io/watchman/ and instruct Watchman to watch your working directory for changes ('watchman watch-project /usr/src/git'). Rename the sample integration hook from query-fsmonitor.sample to query- fsmonitor. Configure git to use the extension ('git config core.fsmonitor true') and optionally turn on the untracked cache for optimal performance ('git config core.untrackedcache true'). Signed-off-by: Ben Peart <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]> --- templates/hooks--query-fsmonitor.sample | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 templates/hooks--query-fsmonitor.sample diff --git a/templates/hooks--query-fsmonitor.sample b/templates/hooks-- query-fsmonitor.sample new file mode 100644 index 0000000000..4bd22f21d8 --- /dev/null +++ b/templates/hooks--query-fsmonitor.sample @@ -0,0 +1,27 @@ +#!/bin/sh +# +# An example hook script to integrate Watchman # +(https://facebook.github.io/watchman/) with git to provide fast # git +status. +# +# The hook is passed a time_t formatted as a string and outputs to # +stdout all files that have been modified since the given time. +# Paths must be relative to the root of the working tree and # +separated by a single NUL. +# +# To enable this hook, rename this file to "query-fsmonitor" + +# Convert unix style paths to escaped Windows style paths case "$(uname +-s)" in +MINGW*|MSYS_NT*) + GIT_WORK_TREE="$(cygpath -aw "$PWD" | sed 's,\\,\\\\,g')" + ;; +*) + GIT_WORK_TREE="$PWD" + ;; +esac + +# Query Watchman for all the changes since the requested time echo +"[\"query\", \"$GIT_WORK_TREE\", {\"since\": $1, +\"fields\":[\"name\"]}]" | \ watchman -j | \ perl -e 'use JSON::PP; my +$o = JSON::PP->new->utf8->decode(join("", <>)); die "Watchman: $o-{'error'}.\nFalling back to scanning...\n" if defined($o->{"error"});print(join("\0", @{$o->{"files"}}));'Last time I checked, the argument to 'since' was not a time_t -- it was a watchman clock spec. Have you tested this? Does it work?
Watchman also accepts a Unix time value for "since" as documented here (https://facebook.github.io/watchman/docs/expr/since.html).
Yes, this has been tested and works correctly as long as you have a recent version that contains the patch (https://github.com/facebook/watchman/commit/67b26a8938336f08918fc7187129b6c1a571f35b) that made sure it was greedy when using the Unix time.

