author | Mads Kiilerich <mads@kiilerich.com> |
Mon, 07 Nov 2011 03:25:10 +0100 | |
branch | stable |
changeset 1015 | 0a583943b4b4 |
parent 1014 | 58b7f58ae08c |
child 1027 | f8c2547c8f16 |
permissions | -rw-r--r-- |
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
1 |
#!/usr/bin/env python |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
2 |
"""Test the running system for features availability. Exit with zero |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
3 |
if all features are there, non-zero otherwise. If a feature name is |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
4 |
prefixed with "no-", the absence of feature is tested. |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
5 |
""" |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
6 |
import optparse |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
7 |
import os |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
8 |
import re |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
9 |
import sys |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
10 |
import tempfile |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
11 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
12 |
tempprefix = 'hg-hghave-' |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
13 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
14 |
def matchoutput(cmd, regexp, ignorestatus=False): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
15 |
"""Return True if cmd executes successfully and its output |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
16 |
is matched by the supplied regular expression. |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
17 |
""" |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
18 |
r = re.compile(regexp) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
19 |
fh = os.popen(cmd) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
20 |
s = fh.read() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
21 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
22 |
ret = fh.close() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
23 |
except IOError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
24 |
# Happen in Windows test environment |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
25 |
ret = 1 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
26 |
return (ignorestatus or ret is None) and r.search(s) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
27 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
28 |
def has_baz(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
29 |
return matchoutput('baz --version 2>&1', r'baz Bazaar version') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
30 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
31 |
def has_bzr(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
32 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
33 |
import bzrlib |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
34 |
return bzrlib.__doc__ != None |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
35 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
36 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
37 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
38 |
def has_bzr114(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
39 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
40 |
import bzrlib |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
41 |
return (bzrlib.__doc__ != None |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
42 |
and bzrlib.version_info[:2] >= (1, 14)) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
43 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
44 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
45 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
46 |
def has_cvs(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
47 |
re = r'Concurrent Versions System.*?server' |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
48 |
return matchoutput('cvs --version 2>&1', re) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
49 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
50 |
def has_darcs(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
51 |
return matchoutput('darcs --version', r'2\.[2-9]', True) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
52 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
53 |
def has_mtn(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
54 |
return matchoutput('mtn --version', r'monotone', True) and not matchoutput( |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
55 |
'mtn --version', r'monotone 0\.', True) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
56 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
57 |
def has_eol_in_paths(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
58 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
59 |
fd, path = tempfile.mkstemp(prefix=tempprefix, suffix='\n\r') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
60 |
os.close(fd) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
61 |
os.remove(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
62 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
63 |
except: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
64 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
65 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
66 |
def has_executablebit(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
67 |
fd, path = tempfile.mkstemp(prefix=tempprefix) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
68 |
os.close(fd) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
69 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
70 |
s = os.lstat(path).st_mode |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
71 |
os.chmod(path, s | 0100) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
72 |
return (os.lstat(path).st_mode & 0100 != 0) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
73 |
finally: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
74 |
os.remove(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
75 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
76 |
def has_icasefs(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
77 |
# Stolen from mercurial.util |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
78 |
fd, path = tempfile.mkstemp(prefix=tempprefix, dir='.') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
79 |
os.close(fd) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
80 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
81 |
s1 = os.stat(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
82 |
d, b = os.path.split(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
83 |
p2 = os.path.join(d, b.upper()) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
84 |
if path == p2: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
85 |
p2 = os.path.join(d, b.lower()) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
86 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
87 |
s2 = os.stat(p2) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
88 |
return s2 == s1 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
89 |
except: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
90 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
91 |
finally: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
92 |
os.remove(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
93 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
94 |
def has_inotify(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
95 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
96 |
import hgext.inotify.linux.watcher |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
97 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
98 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
99 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
100 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
101 |
def has_fifo(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
102 |
return hasattr(os, "mkfifo") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
103 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
104 |
def has_cacheable_fs(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
105 |
from mercurial import util |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
106 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
107 |
fd, path = tempfile.mkstemp(prefix=tempprefix) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
108 |
os.close(fd) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
109 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
110 |
return util.cachestat(path).cacheable() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
111 |
finally: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
112 |
os.remove(path) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
113 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
114 |
def has_lsprof(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
115 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
116 |
import _lsprof |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
117 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
118 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
119 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
120 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
121 |
def has_gettext(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
122 |
return matchoutput('msgfmt --version', 'GNU gettext-tools') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
123 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
124 |
def has_git(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
125 |
return matchoutput('git --version 2>&1', r'^git version') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
126 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
127 |
def has_docutils(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
128 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
129 |
from docutils.core import publish_cmdline |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
130 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
131 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
132 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
133 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
134 |
def getsvnversion(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
135 |
m = matchoutput('svn --version 2>&1', r'^svn,\s+version\s+(\d+)\.(\d+)') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
136 |
if not m: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
137 |
return (0, 0) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
138 |
return (int(m.group(1)), int(m.group(2))) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
139 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
140 |
def has_svn15(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
141 |
return getsvnversion() >= (1, 5) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
142 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
143 |
def has_svn13(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
144 |
return getsvnversion() >= (1, 3) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
145 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
146 |
def has_svn(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
147 |
return matchoutput('svn --version 2>&1', r'^svn, version') and \ |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
148 |
matchoutput('svnadmin --version 2>&1', r'^svnadmin, version') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
149 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
150 |
def has_svn_bindings(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
151 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
152 |
import svn.core |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
153 |
version = svn.core.SVN_VER_MAJOR, svn.core.SVN_VER_MINOR |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
154 |
if version < (1, 4): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
155 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
156 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
157 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
158 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
159 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
160 |
def has_p4(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
161 |
return matchoutput('p4 -V', r'Rev\. P4/') and matchoutput('p4d -V', r'Rev\. P4D/') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
162 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
163 |
def has_symlink(): |
1010
13862cca5537
tests: use 'hghave symlink' for tests using symlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
1007
diff
changeset
|
164 |
return hasattr(os, "symlink") # FIXME: should also check file system and os |
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
165 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
166 |
def has_tla(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
167 |
return matchoutput('tla --version 2>&1', r'The GNU Arch Revision') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
168 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
169 |
def has_gpg(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
170 |
return matchoutput('gpg --version 2>&1', r'GnuPG') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
171 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
172 |
def has_unix_permissions(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
173 |
d = tempfile.mkdtemp(prefix=tempprefix, dir=".") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
174 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
175 |
fname = os.path.join(d, 'foo') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
176 |
for umask in (077, 007, 022): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
177 |
os.umask(umask) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
178 |
f = open(fname, 'w') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
179 |
f.close() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
180 |
mode = os.stat(fname).st_mode |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
181 |
os.unlink(fname) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
182 |
if mode & 0777 != ~umask & 0666: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
183 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
184 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
185 |
finally: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
186 |
os.rmdir(d) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
187 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
188 |
def has_pyflakes(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
189 |
return matchoutput('echo "import re" 2>&1 | pyflakes', |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
190 |
r"<stdin>:1: 're' imported but unused", |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
191 |
True) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
192 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
193 |
def has_pygments(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
194 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
195 |
import pygments |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
196 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
197 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
198 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
199 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
200 |
def has_outer_repo(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
201 |
return matchoutput('hg root 2>&1', r'') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
202 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
203 |
def has_ssl(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
204 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
205 |
import ssl |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
206 |
import OpenSSL |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
207 |
OpenSSL.SSL.Context |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
208 |
return True |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
209 |
except ImportError: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
210 |
return False |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
211 |
|
1012
018ef69bbe2f
tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
1010
diff
changeset
|
212 |
def has_windows(): |
018ef69bbe2f
tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
1010
diff
changeset
|
213 |
return os.name == 'nt' |
018ef69bbe2f
tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
1010
diff
changeset
|
214 |
|
1013
e00f51032041
tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents:
1012
diff
changeset
|
215 |
def has_system_sh(): |
e00f51032041
tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents:
1012
diff
changeset
|
216 |
return os.name != 'nt' |
e00f51032041
tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents:
1012
diff
changeset
|
217 |
|
1014
58b7f58ae08c
tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents:
1013
diff
changeset
|
218 |
def has_serve(): |
58b7f58ae08c
tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents:
1013
diff
changeset
|
219 |
return os.name != 'nt' # gross approximation |
58b7f58ae08c
tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents:
1013
diff
changeset
|
220 |
|
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
221 |
checks = { |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
222 |
"baz": (has_baz, "GNU Arch baz client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
223 |
"bzr": (has_bzr, "Canonical's Bazaar client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
224 |
"bzr114": (has_bzr114, "Canonical's Bazaar client >= 1.14"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
225 |
"cacheable": (has_cacheable_fs, "cacheable filesystem"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
226 |
"cvs": (has_cvs, "cvs client/server"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
227 |
"darcs": (has_darcs, "darcs client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
228 |
"docutils": (has_docutils, "Docutils text processing library"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
229 |
"eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
230 |
"execbit": (has_executablebit, "executable bit"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
231 |
"fifo": (has_fifo, "named pipes"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
232 |
"gettext": (has_gettext, "GNU Gettext (msgfmt)"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
233 |
"git": (has_git, "git command line client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
234 |
"gpg": (has_gpg, "gpg client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
235 |
"icasefs": (has_icasefs, "case insensitive file system"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
236 |
"inotify": (has_inotify, "inotify extension support"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
237 |
"lsprof": (has_lsprof, "python lsprof module"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
238 |
"mtn": (has_mtn, "monotone client (>= 1.0)"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
239 |
"outer-repo": (has_outer_repo, "outer repo"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
240 |
"p4": (has_p4, "Perforce server and client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
241 |
"pyflakes": (has_pyflakes, "Pyflakes python linter"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
242 |
"pygments": (has_pygments, "Pygments source highlighting library"), |
1014
58b7f58ae08c
tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents:
1013
diff
changeset
|
243 |
"serve": (has_serve, "platform and python can manage 'hg serve -d'"), |
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
244 |
"ssl": (has_ssl, "python >= 2.6 ssl module and python OpenSSL"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
245 |
"svn": (has_svn, "subversion client and admin tools"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
246 |
"svn13": (has_svn13, "subversion client and admin tools >= 1.3"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
247 |
"svn15": (has_svn15, "subversion client and admin tools >= 1.5"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
248 |
"svn-bindings": (has_svn_bindings, "subversion python bindings"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
249 |
"symlink": (has_symlink, "symbolic links"), |
1013
e00f51032041
tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents:
1012
diff
changeset
|
250 |
"system-sh": (has_system_sh, "system() uses sh"), |
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
251 |
"tla": (has_tla, "GNU Arch tla client"), |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
252 |
"unix-permissions": (has_unix_permissions, "unix-style permissions"), |
1012
018ef69bbe2f
tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents:
1010
diff
changeset
|
253 |
"windows": (has_windows, "Windows"), |
1007
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
254 |
} |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
255 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
256 |
def list_features(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
257 |
for name, feature in checks.iteritems(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
258 |
desc = feature[1] |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
259 |
print name + ':', desc |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
260 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
261 |
def test_features(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
262 |
failed = 0 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
263 |
for name, feature in checks.iteritems(): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
264 |
check, _ = feature |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
265 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
266 |
check() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
267 |
except Exception, e: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
268 |
print "feature %s failed: %s" % (name, e) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
269 |
failed += 1 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
270 |
return failed |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
271 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
272 |
parser = optparse.OptionParser("%prog [options] [features]") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
273 |
parser.add_option("--test-features", action="store_true", |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
274 |
help="test available features") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
275 |
parser.add_option("--list-features", action="store_true", |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
276 |
help="list available features") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
277 |
parser.add_option("-q", "--quiet", action="store_true", |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
278 |
help="check features silently") |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
279 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
280 |
if __name__ == '__main__': |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
281 |
options, args = parser.parse_args() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
282 |
if options.list_features: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
283 |
list_features() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
284 |
sys.exit(0) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
285 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
286 |
if options.test_features: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
287 |
sys.exit(test_features()) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
288 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
289 |
quiet = options.quiet |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
290 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
291 |
failures = 0 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
292 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
293 |
def error(msg): |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
294 |
global failures |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
295 |
if not quiet: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
296 |
sys.stderr.write(msg + '\n') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
297 |
failures += 1 |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
298 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
299 |
for feature in args: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
300 |
negate = feature.startswith('no-') |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
301 |
if negate: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
302 |
feature = feature[3:] |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
303 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
304 |
if feature not in checks: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
305 |
error('skipped: unknown feature: ' + feature) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
306 |
continue |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
307 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
308 |
check, desc = checks[feature] |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
309 |
try: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
310 |
available = check() |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
311 |
except Exception, e: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
312 |
error('hghave check failed: ' + feature) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
313 |
continue |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
314 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
315 |
if not negate and not available: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
316 |
error('skipped: missing feature: ' + desc) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
317 |
elif negate and available: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
318 |
error('skipped: system supports %s' % desc) |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
319 |
|
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
320 |
if failures != 0: |
4fad25af75dd
Add hghave test as of 5635a4017061
Christian Ebert <blacktrash@gmx.net>
parents:
diff
changeset
|
321 |
sys.exit(1) |