--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/fsmonitor/pywatchman/capabilities.py Wed Mar 02 16:25:12 2016 +0000
@@ -0,0 +1,69 @@
+# Copyright 2015 Facebook, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
+# and/or other materials provided with the distribution.
+#
+# * Neither the name Facebook nor the names of its contributors may be used to
+# endorse or promote products derived from this software without specific
+# prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import re
+
+def parse_version(vstr):
+ res = 0
+ for n in vstr.split('.'):
+ res = res * 1000
+ res = res + int(n)
+ return res
+
+cap_versions = {
+ "cmd-watch-del-all": "3.1.1",
+ "cmd-watch-project": "3.1",
+ "relative_root": "3.3",
+ "term-dirname": "3.1",
+ "term-idirname": "3.1",
+ "wildmatch": "3.7",
+}
+
+def check(version, name):
+ if name in cap_versions:
+ return version >= parse_version(cap_versions[name])
+ return False
+
+def synthesize(vers, opts):
+ """ Synthesize a capability enabled version response
+ This is a very limited emulation for relatively recent feature sets
+ """
+ parsed_version = parse_version(vers['version'])
+ vers['capabilities'] = {}
+ for name in opts['optional']:
+ vers['capabilities'][name] = check(parsed_version, name)
+ failed = False
+ for name in opts['required']:
+ have = check(parsed_version, name)
+ vers['capabilities'][name] = have
+ if not have:
+ vers['error'] = 'client required capability `' + name + \
+ '` is not supported by this server'
+ return vers
+
+# no-check-code -- this is a 3rd party library