diff tests/hghave @ 4881:c51c9bc4579d

Add hghave utility and run-tests.py support. hghave detects system features like symlinks availability at run-time. Tests can be skipped by starting them with: "$TESTDIR/hghave" symlink || exit 80 The 80 exit status triggers hghave output handling by run-tests.py. Also, tests output can be locally patched on the fly to match reference output.
author Patrick Mezard <pmezard@gmail.com>
date Sat, 14 Jul 2007 18:34:06 +0200
parents
children 4cf6f8dbd1b4
line wrap: on
line diff
new file mode 100755
--- /dev/null
+++ b/tests/hghave
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+"""Test the running system for features availability. Exit with zero
+if all features are there, non-zero otherwise.
+"""
+import optparse
+import os
+import sys
+
+def has_symlink():
+    return hasattr(os, "symlink")
+
+checks = {
+    "symlink": (has_symlink, "symbolic links"),
+}
+
+def list_features():
+    for name, feature in checks.iteritems():
+        desc = feature[1]
+        print name + ':', desc
+
+parser = optparse.OptionParser("%prog [options] [features]")
+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)
+        
+    quiet = options.quiet
+
+    failures = 0
+
+    def error(msg):
+        global failures
+        if not quiet:
+            sys.stderr.write(msg + '\n')
+        failures += 1
+    
+    for feature in args:
+        if feature not in checks:
+            error('hghave: unknown feature: ' + feature)
+            continue
+        
+        check, desc = checks[feature]       
+        if not check():
+            error('hghave: missing feature: ' + desc)
+
+    if failures != 0:
+        sys.exit(1)
+
+