Mercurial > hg > mercurial-crew-with-dirclash
view tests/hghave @ 5377:756a43a30e34
convert: readd --filemap
To handle merges correctly, this revision adds a filemap_source class
that wraps a converter_source and does the work necessary to calculate
the subgraph we're interested in.
The wrapped converter_source must provide a new getchangedfiles method
that, given a revision rev, and an index N, returns the list of files
that are different in rev and its Nth parent.
The implementation depends on the ability to skip some revisions and to
change the parents field of the commit objects that we returned earlier.
To make the conversion restartable, we assume the revisons in the
revmapfile are topologically sorted.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Thu, 04 Oct 2007 23:21:37 -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)