##// END OF EJS Templates
hghave: test hotshot dependencies (debian does not provide profile)
Patrick Mezard -
r5103:e5b21a54 default
parent child Browse files
Show More
@@ -1,106 +1,108 b''
1 1 #!/usr/bin/env python
2 2 """Test the running system for features availability. Exit with zero
3 3 if all features are there, non-zero otherwise. If a feature name is
4 4 prefixed with "no-", the absence of feature is tested.
5 5 """
6 6 import optparse
7 7 import os
8 8 import sys
9 9 import tempfile
10 10
11 11 tempprefix = 'hg-hghave-'
12 12
13 13 def has_symlink():
14 14 return hasattr(os, "symlink")
15 15
16 16 def has_fifo():
17 17 return hasattr(os, "mkfifo")
18 18
19 19 def has_executablebit():
20 20 fd, path = tempfile.mkstemp(prefix=tempprefix)
21 21 os.close(fd)
22 22 try:
23 23 s = os.lstat(path).st_mode
24 24 os.chmod(path, s | 0100)
25 25 return (os.lstat(path).st_mode & 0100 != 0)
26 26 finally:
27 27 os.remove(path)
28 28
29 29 def has_eol_in_paths():
30 30 try:
31 31 fd, path = tempfile.mkstemp(prefix=tempprefix, suffix='\n\r')
32 32 os.close(fd)
33 33 os.remove(path)
34 34 return True
35 35 except:
36 36 return False
37 37
38 38 def has_hotshot():
39 39 try:
40 import hotshot
40 # hotshot.stats tests hotshot and many problematic dependencies
41 # like profile.
42 import hotshot.stats
41 43 return True
42 44 except ImportError:
43 45 return False
44 46
45 47 def has_lsprof():
46 48 try:
47 49 import _lsprof
48 50 return True
49 51 except ImportError:
50 52 return False
51 53
52 54 checks = {
53 55 "eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"),
54 56 "execbit": (has_executablebit, "executable bit"),
55 57 "fifo": (has_fifo, "named pipes"),
56 58 "hotshot": (has_hotshot, "python hotshot module"),
57 59 "lsprof": (has_lsprof, "python lsprof module"),
58 60 "symlink": (has_symlink, "symbolic links"),
59 61 }
60 62
61 63 def list_features():
62 64 for name, feature in checks.iteritems():
63 65 desc = feature[1]
64 66 print name + ':', desc
65 67
66 68 parser = optparse.OptionParser("%prog [options] [features]")
67 69 parser.add_option("--list-features", action="store_true",
68 70 help="list available features")
69 71 parser.add_option("-q", "--quiet", action="store_true",
70 72 help="check features silently")
71 73
72 74 if __name__ == '__main__':
73 75 options, args = parser.parse_args()
74 76 if options.list_features:
75 77 list_features()
76 78 sys.exit(0)
77 79
78 80 quiet = options.quiet
79 81
80 82 failures = 0
81 83
82 84 def error(msg):
83 85 global failures
84 86 if not quiet:
85 87 sys.stderr.write(msg + '\n')
86 88 failures += 1
87 89
88 90 for feature in args:
89 91 negate = feature.startswith('no-')
90 92 if negate:
91 93 feature = feature[3:]
92 94
93 95 if feature not in checks:
94 96 error('hghave: unknown feature: ' + feature)
95 97 continue
96 98
97 99 check, desc = checks[feature]
98 100 if not negate and not check():
99 101 error('hghave: missing feature: ' + desc)
100 102 elif negate and check():
101 103 error('hghave: system supports %s' % desc)
102 104
103 105 if failures != 0:
104 106 sys.exit(1)
105 107
106 108
General Comments 0
You need to be logged in to leave comments. Login now