website/docs/release-notes.md
Watchman is continuously deployed inside Facebook, which means that we don't explicitly maintain version numbers. We have automation that cuts a weekly tag with a named derived from the date. You can learn more about how to reason about supported capabilities and our backwards compatibility guidelines in the Compatibility Rules docs.
We focus on the highlights only in these release notes. For a full history that includes all of the gory details, please see the commit history on GitHub.
watchman-replicate-subscription. It can replicate an existing
watchman subscription. Integrators can use this script to validate watchman
notifications their client is receiving.suffix-set documentation for
more detailsWe weren't great at updating the release notes since the prior release; there was a lot of work to support our sister project EdenFS that isn't broadly relevant to those outside FB at the time of writing.
content.sha1hex. This field expands to the SHA1 hash of the file
contents, expressed in hex digits (40 character hex string). Watchman
maintains a cache of the content hashes and can compute the hash on demand and
also heuristically as files are changed. This is useful for tooling that wants
to perform more intelligent cache invalidation or build artifact fetching from
content addressed storage.O(what-you-changed) than to
O(all-repo-changes) when rebasing your code. Using this feature effectively
may require some additional infrastructure to compute and associate data with
revisions from your repo.perf_logger_command is enabled in the global configurationdrop, defer) options.since generator behavior when using unix timestamps rather than the
preferred clock string syntaxWhoops, we never got around to tagging this beyond a release candidate tag!
flush-subscriptions to synchronize subscriptions associated with
the current session./ as the directory separator. Previously we used \.
This change should be pretty neutral for clients, and makes it easier to work
with both the internals and the integration test infrastructure.n:FOO style server side named cursor clockspecs to take full
advantage of this.glob generator as a walking strategy for queries. This allows
watchman to evaluate globs in the most efficient manner. Our friends in the
Buck project have already integrated this into their BUCK file parsing to
evaluate globs without touching the filesystem!"case_sensitive": true option to queries to force matches to happen in
a case sensitive manner, even if the watched root is on a case insensitive
filesystem. This is used to accelerate certain types of internal traversal: if
we know that a path is case sensitive we can perform an O(1) lookup where we
would otherwise have to perform an O(number-of-directory-entries) scan and
compare.ignore_dirs configuration option on OS X and
Windows systems. We take advantage of an undocumented (but supported!) API to
further accelerate this for the first 8 entries in the ignore_dirs on OS X.
Users that depend on this configuration to avoid recrawls will want to review
and prioritize their most active build dirs to the front of the ignore_dirs
specified in their .watchmanconfig file.fsevents_try_resync: true in either /etc/watchman.json or your
.watchmanconfig. This should reduce the frequency of recrawl warnings for
some users/workloads, and also improves I/O for users with extremely large
trees.sock_group and sock_access can be used to control this new behavior.symlink_target field to the stored metadata for files. This holds
the text of the symbolic link for symlinks. You can test whether it is
supported by a watchman server using the capability name
field-symlink_target.hint_num_dirs configuration option.(These changes have not yet been released to pypi)
watchman-make and watchman-wait commandshint_num_files_per_dir setting in your
.watchmanconfig to better match your tree.
More detailsgetattrlistbulk.
This allows us to improve the data:syscall ratio during crawling and can
improve throughput by up to 40% for larger trees.sync_timeout to the clock commandwatch or watch-project at the same
time-j CLI option now accepts either JSON or BSER encoded command on stdincapabilityCheck methodSocketTimeout exception to distinguish timeouts from protocol level
exceptions(Watchman 3.6.0 wasn't formally released)
query match on foo*.java with wholename scope would
incorrectly match foo/bar/baz.java.src/**/*.java recursive glob pattern support to query match.query's match operator.includedotfiles option to query match to include files whose names
start with ..noescape option to query match to make \ match literal \.watch-project will now try harder to re-use an existing watch and avoid
creating an overlapping watch.long long data type in the python BSER moduleundefined values in
objects when serializing them; we now omit keys whose values are undefined
rather than throw an exception.trigger now supports an optional relative_root argument. The trigger is
evaluated with respect to this subdirectory. See
trigger for more.size and you have files larger than
2GB in your watched root.query and subscribe now support an optional relative_root argument.
Inputs and outputs are evaluated with respect to this subdirectory. See
File Queries for more.