Show More
@@ -1,75 +1,75 b'' | |||
|
1 | 1 | # Copyright 2015 Facebook, Inc. |
|
2 | 2 | # All rights reserved. |
|
3 | 3 | # |
|
4 | 4 | # Redistribution and use in source and binary forms, with or without |
|
5 | 5 | # modification, are permitted provided that the following conditions are met: |
|
6 | 6 | # |
|
7 | 7 | # * Redistributions of source code must retain the above copyright notice, |
|
8 | 8 | # this list of conditions and the following disclaimer. |
|
9 | 9 | # |
|
10 | 10 | # * Redistributions in binary form must reproduce the above copyright notice, |
|
11 | 11 | # this list of conditions and the following disclaimer in the documentation |
|
12 | 12 | # and/or other materials provided with the distribution. |
|
13 | 13 | # |
|
14 | 14 | # * Neither the name Facebook nor the names of its contributors may be used to |
|
15 | 15 | # endorse or promote products derived from this software without specific |
|
16 | 16 | # prior written permission. |
|
17 | 17 | # |
|
18 | 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
|
19 | 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
20 | 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
|
21 | 21 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
|
22 | 22 | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|
23 | 23 | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
|
24 | 24 | # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
|
25 | 25 | # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
|
26 | 26 | # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
27 | 27 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
28 | 28 | |
|
29 | 29 | # no unicode literals |
|
30 | 30 | from __future__ import absolute_import, division, print_function |
|
31 | 31 | |
|
32 | 32 | |
|
33 | 33 | def parse_version(vstr): |
|
34 | 34 | res = 0 |
|
35 | 35 | for n in vstr.split("."): |
|
36 | 36 | res = res * 1000 |
|
37 | 37 | res = res + int(n) |
|
38 | 38 | return res |
|
39 | 39 | |
|
40 | 40 | |
|
41 | 41 | cap_versions = { |
|
42 | 42 | "cmd-watch-del-all": "3.1.1", |
|
43 | 43 | "cmd-watch-project": "3.1", |
|
44 | 44 | "relative_root": "3.3", |
|
45 | 45 | "term-dirname": "3.1", |
|
46 | 46 | "term-idirname": "3.1", |
|
47 | 47 | "wildmatch": "3.7", |
|
48 | 48 | } |
|
49 | 49 | |
|
50 | 50 | |
|
51 | 51 | def check(version, name): |
|
52 | 52 | if name in cap_versions: |
|
53 | 53 | return version >= parse_version(cap_versions[name]) |
|
54 | 54 | return False |
|
55 | 55 | |
|
56 | 56 | |
|
57 | 57 | def synthesize(vers, opts): |
|
58 | 58 | """ Synthesize a capability enabled version response |
|
59 | 59 | This is a very limited emulation for relatively recent feature sets |
|
60 | 60 | """ |
|
61 | 61 | parsed_version = parse_version(vers["version"]) |
|
62 | 62 | vers["capabilities"] = {} |
|
63 | 63 | for name in opts["optional"]: |
|
64 | 64 | vers["capabilities"][name] = check(parsed_version, name) |
|
65 | failed = False # noqa: F841 T25377293 Grandfathered in | |
|
65 | ||
|
66 | 66 | for name in opts["required"]: |
|
67 | 67 | have = check(parsed_version, name) |
|
68 | 68 | vers["capabilities"][name] = have |
|
69 | 69 | if not have: |
|
70 | 70 | vers["error"] = ( |
|
71 | 71 | "client required capability `" |
|
72 | 72 | + name |
|
73 | 73 | + "` is not supported by this server" |
|
74 | 74 | ) |
|
75 | 75 | return vers |
General Comments 0
You need to be logged in to leave comments.
Login now