Mercurial > hg > mercurial-crew-with-dirclash
view tests/hghave @ 5331:8ee5b8129e7b
hgweb: don't raise an exception when displying empty repos
The nullid node claims it's in the default branch, but the branch dict
is empty. This fixes the main symptom from issue696, but we may want
to set branchtags()['default'] = nullid somewhere for empty repos.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Mon, 24 Sep 2007 19:00:11 -0300 |
parents | 961876838de0 |
children | 9400d677efc7 |
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 optparse import os import re import sys import tempfile tempprefix = 'hg-hghave-' def matchoutput(cmd, regexp, ignorestatus=False): """Return True if cmd executes successfully and its output is matched by the supplied regular expression. """ r = re.compile(regexp) fh = os.popen(cmd) s = fh.read() ret = fh.close() return (ignorestatus or ret is None) and r.search(s) def has_symlink(): return hasattr(os, "symlink") def has_fifo(): return hasattr(os, "mkfifo") def has_cvs(): return matchoutput('cvs --version 2>&1', r'Concurrent Versions System') def has_cvsps(): return matchoutput('cvsps -h -q 2>&1', r'cvsps version', True) def has_executablebit(): fd, path = tempfile.mkstemp(prefix=tempprefix) 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(prefix=tempprefix, suffix='\n\r') os.close(fd) os.remove(path) return True except: return False def has_hotshot(): try: # hotshot.stats tests hotshot and many problematic dependencies # like profile. import hotshot.stats return True except ImportError: return False def has_lsprof(): try: import _lsprof return True except ImportError: return False def has_git(): return matchoutput('git --version 2>&1', r'^git version') checks = { "cvs": (has_cvs, "cvs client"), "cvsps": (has_cvsps, "cvsps utility"), "eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"), "execbit": (has_executablebit, "executable bit"), "git": (has_git, "git command line client"), "fifo": (has_fifo, "named pipes"), "hotshot": (has_hotshot, "python hotshot module"), "lsprof": (has_lsprof, "python lsprof module"), "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: negate = feature.startswith('no-') if negate: feature = feature[3:] if feature not in checks: error('hghave: unknown feature: ' + feature) continue check, desc = checks[feature] if not negate and not check(): error('hghave: missing feature: ' + desc) elif negate and check(): error('hghave: system supports %s' % desc) if failures != 0: sys.exit(1)