Mercurial > hg > mercurial-crew-with-dirclash
view tests/hghave @ 5338:f87685355c9c
revlog: fix revlogio.packentry corner case
We want to store version information about the revlog in the first
entry of its index. The code in packentry was using some heuristics
to detect whether this was the first entry, but these heuristics could
fail in some cases (e.g. rev 0 was empty; rev 1 descends directly from
the nullid and is stored as a delta).
We now give the revision number to packentry to avoid heuristics.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Wed, 26 Sep 2007 01:58:45 -0300 |
parents | 9400d677efc7 |
children | 190c234c8fa0 |
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') def has_svn(): return matchoutput('svn --version 2>&1', r'^svn, version') and \ matchoutput('svnadmin --version 2>&1', r'^svnadmin, version') def has_svn_bindings(): try: import svn.core return True except ImportError: return False 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"), "svn": (has_svn, "subversion client and admin tools"), "svn-bindings": (has_svn_bindings, "subversion python bindings"), "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)