version
The version command will tell you the version and build information for the currently running watchman service:
$ watchman version
{
"version": "2.9.6",
"buildinfo": "git:2727d9a1e47a4a2229c65cbb2f0c7656cbd96270"
}
To get the version of the client:
$ watchman -v
2.9.8
If the server and client versions don't match up, you should probably restart
your server: watchman shutdown-server ; watchman
.
Capabilities
Since 3.8.
The version command can be used to check for named capabilities. Capabilities make it easier to check whether the server implements functionality based on the name of that function rather than by having the client build up knowledge about when those functions were introduced.
You can read more about the available capability names.
To check whether the relative_root
capability is supported:
$ watchman -j <<< '["version", {"optional":["relative_root"]}]'
{
"version": "3.8.0",
"capabilities": {
"relative_root": true
}
}
If the capability is not supported:
$ watchman -j <<< '["version", {"optional":["will-never-exist"]}]'
{
"version": "3.8.0",
"capabilities": {
"will-never-exist": false
}
}
To have the server generate an error response if a capability is not supported:
$ watchman -j <<< '["version", {"required":["will-never-exist"]}]'
{
"version": "3.8.0",
"capabilities": {
"will-never-exist": false
},
"error": "client required capability `will-never-exist` is not supported by this server"
}
To require one feature and test whether some optional features are supported:
$ watchman -j <<< '["version", {"required":["term-match"],"optional":["a","b"]}]'
{
"version": "3.8.0",
"capabilities": {
"a": false,
"b": false,
"term-match": true
}
}
capabilityCheck
The node and python clients provide a capabilityCheck
method that will
perform the version check above, and that also provide limited support for
testing capability support against older versions of the watchman server. This
facilitates a smoother transition from version number based checks to capability
named based checks.
In python:
import pywatchman
client = pywatchman.client()
# will throw an error if any of the required names are not supported
res = client.capabilityCheck(optional=['a'], required=['term-match'])
print res
# {'version': '3.8.0', 'capabilities': {'term-match': True, 'a': False}}
In node:
var watchman = require('fb-watchman');
var client = new watchman.Client();
client.capabilityCheck({optional:['a'], required:['term-match']},
function (error, resp) {
if (error) {
// error will be an Error object if any of the required named
// are not supported
}
console.log(resp);
// {'version': '3.8.0', 'capabilities': {'term-match': false, 'a': false}}
client.end();
});