hghave
77 lines
| 2.0 KiB
| text/plain
|
TextLexer
/ tests / hghave
|
r4881 | #!/usr/bin/env python | ||
"""Test the running system for features availability. Exit with zero | ||||
|
r5084 | if all features are there, non-zero otherwise. If a feature name is | ||
prefixed with "no-", the absence of feature is tested. | ||||
|
r4881 | """ | ||
import optparse | ||||
import sys | ||||
|
r16966 | import hghave | ||
|
r9446 | |||
|
r16966 | checks = hghave.checks | ||
|
r4881 | |||
def list_features(): | ||||
for name, feature in checks.iteritems(): | ||||
desc = feature[1] | ||||
print name + ':', desc | ||||
|
r8059 | def test_features(): | ||
failed = 0 | ||||
for name, feature in checks.iteritems(): | ||||
check, _ = feature | ||||
try: | ||||
check() | ||||
except Exception, e: | ||||
print "feature %s failed: %s" % (name, e) | ||||
failed += 1 | ||||
return failed | ||||
|
r4881 | parser = optparse.OptionParser("%prog [options] [features]") | ||
|
r8059 | parser.add_option("--test-features", action="store_true", | ||
help="test available features") | ||||
|
r4881 | parser.add_option("--list-features", action="store_true", | ||
help="list available features") | ||||
parser.add_option("-q", "--quiet", action="store_true", | ||||
help="check features silently") | ||||
if __name__ == '__main__': | ||||
options, args = parser.parse_args() | ||||
if options.list_features: | ||||
list_features() | ||||
sys.exit(0) | ||||
|
r5081 | |||
|
r8059 | if options.test_features: | ||
sys.exit(test_features()) | ||||
|
r4881 | quiet = options.quiet | ||
failures = 0 | ||||
def error(msg): | ||||
global failures | ||||
if not quiet: | ||||
sys.stderr.write(msg + '\n') | ||||
failures += 1 | ||||
|
r5081 | |||
|
r4881 | for feature in args: | ||
|
r5084 | negate = feature.startswith('no-') | ||
if negate: | ||||
feature = feature[3:] | ||||
|
r5091 | |||
|
r4881 | if feature not in checks: | ||
|
r5685 | error('skipped: unknown feature: ' + feature) | ||
|
r18229 | sys.exit(2) | ||
|
r5081 | |||
check, desc = checks[feature] | ||||
|
r8060 | try: | ||
available = check() | ||||
except Exception, e: | ||||
error('hghave check failed: ' + feature) | ||||
continue | ||||
if not negate and not available: | ||||
|
r5685 | error('skipped: missing feature: ' + desc) | ||
|
r8060 | elif negate and available: | ||
|
r5685 | error('skipped: system supports %s' % desc) | ||
|
r4881 | |||
if failures != 0: | ||||
sys.exit(1) | ||||