tests/hghave
author Matt Harbison <matt_harbison@yahoo.com>
Tue, 31 Mar 2015 11:11:39 -0400
branchstable
changeset 24537 2bb13f2b778c
parent 22762 05b3238ba901
child 25732 b94df10cc3b5
permissions -rwxr-xr-x
dirstate: don't require exact case when adding dirs on icasefs (issue4578) We don't require it when adding files on a case insensitive filesystem, so don't require it to add directories for consistency. The problem with the previous code was that _walkexplicit() was only returning the normalized directory. The file(s) in the directory are then appended, and passed to the matcher. But if the user asks for 'capsdir1/capsdir', the matcher will not accept 'CapsDir1/CapsDir/AbC.txt', and the name is dropped. Matching based on the non-normalized name is required. If not normalizing, skip the extra string building for efficiency. '.' is replaced with '' so that the path being tested when no file is specified, isn't prefixed with './' (and therefore fail the match).

#!/usr/bin/env python
"""Test the running system for features availability. Exit with zero
if all features are there, non-zero otherwise. If a feature name is
prefixed with "no-", the absence of feature is tested.
"""
import optparse
import sys
import hghave

checks = hghave.checks

def list_features():
    for name, feature in sorted(checks.iteritems()):
        desc = feature[1]
        print name + ':', desc

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

parser = optparse.OptionParser("%prog [options] [features]")
parser.add_option("--test-features", action="store_true",
                  help="test available 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)

    if options.test_features:
        sys.exit(test_features())

    quiet = options.quiet

    failures = 0

    def error(msg):
        global failures
        if not quiet:
            sys.stderr.write(msg + '\n')
        failures += 1

    for feature in args:
        negate = feature.startswith('no-')
        if negate:
            feature = feature[3:]

        if feature not in checks:
            error('skipped: unknown feature: ' + feature)
            sys.exit(2)

        check, desc = checks[feature]
        try:
            available = check()
        except Exception, e:
            error('hghave check failed: ' + feature)
            continue

        if not negate and not available:
            error('skipped: missing feature: ' + desc)
        elif negate and available:
            error('skipped: system supports %s' % desc)

    if failures != 0:
        sys.exit(1)