565
|
1 #!/usr/bin/env python |
|
2 """Test the running system for features availability. Exit with zero |
|
3 if all features are there, non-zero otherwise. If a feature name is |
|
4 prefixed with "no-", the absence of feature is tested. |
|
5 """ |
|
6 import optparse |
|
7 import sys |
|
8 import hghave |
|
9 |
|
10 checks = hghave.checks |
|
11 |
|
12 def list_features(): |
|
13 for name, feature in checks.iteritems(): |
|
14 desc = feature[1] |
|
15 print name + ':', desc |
|
16 |
|
17 def test_features(): |
|
18 failed = 0 |
|
19 for name, feature in checks.iteritems(): |
|
20 check, _ = feature |
|
21 try: |
|
22 check() |
|
23 except Exception, e: |
|
24 print "feature %s failed: %s" % (name, e) |
|
25 failed += 1 |
|
26 return failed |
|
27 |
|
28 parser = optparse.OptionParser("%prog [options] [features]") |
|
29 parser.add_option("--test-features", action="store_true", |
|
30 help="test available features") |
|
31 parser.add_option("--list-features", action="store_true", |
|
32 help="list available features") |
|
33 parser.add_option("-q", "--quiet", action="store_true", |
|
34 help="check features silently") |
|
35 |
|
36 if __name__ == '__main__': |
|
37 options, args = parser.parse_args() |
|
38 if options.list_features: |
|
39 list_features() |
|
40 sys.exit(0) |
|
41 |
|
42 if options.test_features: |
|
43 sys.exit(test_features()) |
|
44 |
|
45 quiet = options.quiet |
|
46 |
|
47 failures = 0 |
|
48 |
|
49 def error(msg): |
|
50 global failures |
|
51 if not quiet: |
|
52 sys.stderr.write(msg + '\n') |
|
53 failures += 1 |
|
54 |
|
55 for feature in args: |
|
56 negate = feature.startswith('no-') |
|
57 if negate: |
|
58 feature = feature[3:] |
|
59 |
|
60 if feature not in checks: |
|
61 error('skipped: unknown feature: ' + feature) |
|
62 continue |
|
63 |
|
64 check, desc = checks[feature] |
|
65 try: |
|
66 available = check() |
|
67 except Exception, e: |
|
68 error('hghave check failed: ' + feature) |
|
69 continue |
|
70 |
|
71 if not negate and not available: |
|
72 error('skipped: missing feature: ' + desc) |
|
73 elif negate and available: |
|
74 error('skipped: system supports %s' % desc) |
|
75 |
|
76 if failures != 0: |
|
77 sys.exit(1) |