view tests/hghave @ 5137:2be225ea5722

extdiff: do single file diffs from the wc with no copy Extdiff was always making a temporary directory and copying files even when not required. This change makes extdiff avoid the copy when diffing a single file that lives in the wc. This lets external diff tools edit the working copy file directly. It also lets other extensions resuse the functions in extdiff and get in-place diffs.
author Brad Schick <schickb@gmail.com>
date Mon, 06 Aug 2007 14:50:57 -0700
parents e86788af599a
children ea7b982b6c08
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.
"""
import optparse
import os
import sys
import tempfile

def has_symlink():
    return hasattr(os, "symlink")

def has_fifo():
    return hasattr(os, "mkfifo")

def has_executablebit():
    fd, path = tempfile.mkstemp()
    os.close(fd)
    try:
        s = os.lstat(path).st_mode
        os.chmod(path, s | 0100)
        return (os.lstat(path).st_mode & 0100 != 0)
    finally:
        os.remove(path)

def has_eol_in_paths():
    try:
        fd, path = tempfile.mkstemp(suffix='\n\r')
        os.close(fd)
        os.remove(path)
        return True
    except:
        return False

checks = {
    "symlink": (has_symlink, "symbolic links"),
    "fifo": (has_fifo, "named pipes"),
    "execbit": (has_executablebit, "executable bit"),
    "eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"),
}

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)