Re: [PATCH v1 5/5] Add a sample query-fsmonitor hook script that integrates with the cross platform Watchman file watching service.
- From
Ben Peart <peartben@gmail.com>
- Date
- May 15, 2017, 20:10 UTC
- Message-ID
- <268acc85-8fc7-7779-8cb8-f0e88e7d50a5@gmail.com>
- In-Reply-To
- <fb609e259c714469b5528888e14c2e3a@exmbdft7.ad.twosigma.com>
On 5/15/2017 3:50 PM, David Turner wrote:
Show 71 quoted lines
>
>> -----Original Message-----
>> From: Ben Peart [mailto:peartben@gmail.com]
>> Sent: Monday, May 15, 2017 3:14 PM
>> To: git@vger.kernel.org
>> Cc: gitster@pobox.com; benpeart@microsoft.com; pclouds@gmail.com;
>> johannes.schindelin@gmx.de; David Turner <David.Turner@twosigma.com>;
>> peff@peff.net
>> 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@microsoft.com>
>> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
>> ---
>> 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.