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