> -----Original Message----- > From: Ben Peart [mailto:peartben@xxxxxxxxx] > Sent: Monday, May 15, 2017 3:14 PM > To: git@xxxxxxxxxxxxxxx > Cc: gitster@xxxxxxxxx; benpeart@xxxxxxxxxxxxx; pclouds@xxxxxxxxx; > johannes.schindelin@xxxxxx; David Turner <David.Turner@xxxxxxxxxxxx>; > peff@xxxxxxxx > 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 <benpeart@xxxxxxxxxxxxx> > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > --- > 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?