view tests/hghave @ 52136:e68fe567a780 stable

evolution: stop wrongly flagging unrelated part of a split as divergent Before this change, divergence introduced by successors of a split would "spill" to other unrelated successors of the split that were not ambiguous. This small changes fixes it. Thanks goes to Manuel Jacobs for the discussion leading to this realization that a new simple and correct definition could be found.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 25 Oct 2024 17:33:47 +0200
parents 6000f5b25c9b
children
line wrap: on
line source

#!/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 hghave
import optparse
import os
import sys

checks = hghave.checks


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


def test_features():
    failed = 0
    for name, feature in checks.items():
        check, _ = feature
        try:
            check()
        except Exception as 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"
)


def _loadaddon():
    if 'TESTDIR' in os.environ:
        # loading from '.' isn't needed, because `hghave` should be
        # running at TESTTMP in this case
        path = os.environ['TESTDIR']
    else:
        path = '.'

    if not os.path.exists(os.path.join(path, 'hghaveaddon.py')):
        return

    sys.path.insert(0, path)
    try:
        import hghaveaddon

        assert hghaveaddon  # silence pyflakes
    except BaseException as inst:
        sys.stderr.write(
            'failed to import hghaveaddon.py from %r: %s\n' % (path, inst)
        )
        sys.exit(2)
    sys.path.pop(0)


if __name__ == '__main__':
    options, args = parser.parse_args()
    _loadaddon()
    if options.list_features:
        list_features()
        sys.exit(0)

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

    hghave.require(args)