annotate tests/hghave.py @ 565:8c6dc6a6f5d8

tests: pull in hghave Previously, the hghave checks that were commented out in the tests were broken if uncommented. One cause was that it was expecting hghave in the testdir, while our testdir didn't contain hghave. Now it does. The hghave was pulled unmodified from Mercurial 2.3, to match the version of run-tests.py in use.
author David M. Carr <david@carrclan.us>
date Sun, 28 Oct 2012 21:05:51 -0400
parents
children cca56bbea143
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
565
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
1 import os, stat, socket
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
2 import re
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
3 import sys
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
4 import tempfile
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
5
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
6 tempprefix = 'hg-hghave-'
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
7
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
8 def matchoutput(cmd, regexp, ignorestatus=False):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
9 """Return True if cmd executes successfully and its output
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
10 is matched by the supplied regular expression.
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
11 """
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
12 r = re.compile(regexp)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
13 fh = os.popen(cmd)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
14 s = fh.read()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
15 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
16 ret = fh.close()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
17 except IOError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
18 # Happen in Windows test environment
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
19 ret = 1
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
20 return (ignorestatus or ret is None) and r.search(s)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
21
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
22 def has_baz():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
23 return matchoutput('baz --version 2>&1', r'baz Bazaar version')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
24
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
25 def has_bzr():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
26 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
27 import bzrlib
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
28 return bzrlib.__doc__ is not None
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
29 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
30 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
31
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
32 def has_bzr114():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
33 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
34 import bzrlib
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
35 return (bzrlib.__doc__ is not None
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
36 and bzrlib.version_info[:2] >= (1, 14))
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
37 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
38 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
39
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
40 def has_cvs():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
41 re = r'Concurrent Versions System.*?server'
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
42 return matchoutput('cvs --version 2>&1', re) and not has_msys()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
43
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
44 def has_darcs():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
45 return matchoutput('darcs --version', r'2\.[2-9]', True)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
46
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
47 def has_mtn():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
48 return matchoutput('mtn --version', r'monotone', True) and not matchoutput(
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
49 'mtn --version', r'monotone 0\.', True)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
50
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
51 def has_eol_in_paths():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
52 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
53 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix, suffix='\n\r')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
54 os.close(fd)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
55 os.remove(path)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
56 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
57 except (IOError, OSError):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
58 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
59
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
60 def has_executablebit():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
61 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
62 EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
63 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
64 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
65 os.close(fh)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
66 m = os.stat(fn).st_mode & 0777
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
67 new_file_has_exec = m & EXECFLAGS
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
68 os.chmod(fn, m ^ EXECFLAGS)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
69 exec_flags_cannot_flip = ((os.stat(fn).st_mode & 0777) == m)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
70 finally:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
71 os.unlink(fn)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
72 except (IOError, OSError):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
73 # we don't care, the user probably won't be able to commit anyway
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
74 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
75 return not (new_file_has_exec or exec_flags_cannot_flip)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
76
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
77 def has_icasefs():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
78 # Stolen from mercurial.util
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
79 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
80 os.close(fd)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
81 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
82 s1 = os.stat(path)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
83 d, b = os.path.split(path)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
84 p2 = os.path.join(d, b.upper())
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
85 if path == p2:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
86 p2 = os.path.join(d, b.lower())
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
87 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
88 s2 = os.stat(p2)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
89 return s2 == s1
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
90 except OSError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
91 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
92 finally:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
93 os.remove(path)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
94
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
95 def has_inotify():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
96 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
97 import hgext.inotify.linux.watcher
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
98 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
99 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
100 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
101 sock = socket.socket(socket.AF_UNIX)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
102 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
103 sock.bind(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
104 except socket.error, err:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
105 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
106 sock.close()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
107 os.unlink(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
108 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
109
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
110 def has_fifo():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
111 if getattr(os, "mkfifo", None) is None:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
112 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
113 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
114 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
115 os.mkfifo(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
116 os.unlink(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
117 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
118 except OSError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
119 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
120
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
121 def has_cacheable_fs():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
122 from mercurial import util
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
123
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
124 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
125 os.close(fd)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
126 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
127 return util.cachestat(path).cacheable()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
128 finally:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
129 os.remove(path)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
130
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
131 def has_lsprof():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
132 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
133 import _lsprof
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
134 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
135 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
136 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
137
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
138 def has_gettext():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
139 return matchoutput('msgfmt --version', 'GNU gettext-tools')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
140
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
141 def has_git():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
142 return matchoutput('git --version 2>&1', r'^git version')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
143
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
144 def has_docutils():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
145 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
146 from docutils.core import publish_cmdline
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
147 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
148 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
149 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
150
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
151 def getsvnversion():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
152 m = matchoutput('svn --version 2>&1', r'^svn,\s+version\s+(\d+)\.(\d+)')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
153 if not m:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
154 return (0, 0)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
155 return (int(m.group(1)), int(m.group(2)))
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
156
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
157 def has_svn15():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
158 return getsvnversion() >= (1, 5)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
159
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
160 def has_svn13():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
161 return getsvnversion() >= (1, 3)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
162
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
163 def has_svn():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
164 return matchoutput('svn --version 2>&1', r'^svn, version') and \
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
165 matchoutput('svnadmin --version 2>&1', r'^svnadmin, version')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
166
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
167 def has_svn_bindings():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
168 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
169 import svn.core
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
170 version = svn.core.SVN_VER_MAJOR, svn.core.SVN_VER_MINOR
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
171 if version < (1, 4):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
172 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
173 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
174 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
175 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
176
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
177 def has_p4():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
178 return (matchoutput('p4 -V', r'Rev\. P4/') and
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
179 matchoutput('p4d -V', r'Rev\. P4D/'))
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
180
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
181 def has_symlink():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
182 if getattr(os, "symlink", None) is None:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
183 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
184 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
185 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
186 os.symlink(".", name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
187 os.unlink(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
188 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
189 except (OSError, AttributeError):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
190 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
191
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
192 def has_hardlink():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
193 from mercurial import util
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
194 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
195 os.close(fh)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
196 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
197 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
198 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
199 util.oslink(fn, name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
200 os.unlink(name)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
201 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
202 except OSError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
203 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
204 finally:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
205 os.unlink(fn)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
206
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
207 def has_tla():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
208 return matchoutput('tla --version 2>&1', r'The GNU Arch Revision')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
209
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
210 def has_gpg():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
211 return matchoutput('gpg --version 2>&1', r'GnuPG')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
212
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
213 def has_unix_permissions():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
214 d = tempfile.mkdtemp(dir='.', prefix=tempprefix)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
215 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
216 fname = os.path.join(d, 'foo')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
217 for umask in (077, 007, 022):
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
218 os.umask(umask)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
219 f = open(fname, 'w')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
220 f.close()
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
221 mode = os.stat(fname).st_mode
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
222 os.unlink(fname)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
223 if mode & 0777 != ~umask & 0666:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
224 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
225 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
226 finally:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
227 os.rmdir(d)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
228
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
229 def has_pyflakes():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
230 return matchoutput("sh -c \"echo 'import re' 2>&1 | pyflakes\"",
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
231 r"<stdin>:1: 're' imported but unused",
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
232 True)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
233
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
234 def has_pygments():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
235 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
236 import pygments
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
237 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
238 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
239 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
240
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
241 def has_outer_repo():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
242 # failing for other reasons than 'no repo' imply that there is a repo
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
243 return not matchoutput('hg root 2>&1',
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
244 r'abort: no repository found', True)
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
245
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
246 def has_ssl():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
247 try:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
248 import ssl
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
249 import OpenSSL
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
250 OpenSSL.SSL.Context
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
251 return True
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
252 except ImportError:
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
253 return False
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
254
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
255 def has_windows():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
256 return os.name == 'nt'
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
257
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
258 def has_system_sh():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
259 return os.name != 'nt'
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
260
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
261 def has_serve():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
262 return os.name != 'nt' # gross approximation
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
263
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
264 def has_tic():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
265 return matchoutput('test -x "`which tic`"', '')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
266
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
267 def has_msys():
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
268 return os.getenv('MSYSTEM')
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
269
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
270 checks = {
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
271 "true": (lambda: True, "yak shaving"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
272 "false": (lambda: False, "nail clipper"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
273 "baz": (has_baz, "GNU Arch baz client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
274 "bzr": (has_bzr, "Canonical's Bazaar client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
275 "bzr114": (has_bzr114, "Canonical's Bazaar client >= 1.14"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
276 "cacheable": (has_cacheable_fs, "cacheable filesystem"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
277 "cvs": (has_cvs, "cvs client/server"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
278 "darcs": (has_darcs, "darcs client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
279 "docutils": (has_docutils, "Docutils text processing library"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
280 "eol-in-paths": (has_eol_in_paths, "end-of-lines in paths"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
281 "execbit": (has_executablebit, "executable bit"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
282 "fifo": (has_fifo, "named pipes"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
283 "gettext": (has_gettext, "GNU Gettext (msgfmt)"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
284 "git": (has_git, "git command line client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
285 "gpg": (has_gpg, "gpg client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
286 "hardlink": (has_hardlink, "hardlinks"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
287 "icasefs": (has_icasefs, "case insensitive file system"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
288 "inotify": (has_inotify, "inotify extension support"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
289 "lsprof": (has_lsprof, "python lsprof module"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
290 "mtn": (has_mtn, "monotone client (>= 1.0)"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
291 "outer-repo": (has_outer_repo, "outer repo"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
292 "p4": (has_p4, "Perforce server and client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
293 "pyflakes": (has_pyflakes, "Pyflakes python linter"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
294 "pygments": (has_pygments, "Pygments source highlighting library"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
295 "serve": (has_serve, "platform and python can manage 'hg serve -d'"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
296 "ssl": (has_ssl, "python >= 2.6 ssl module and python OpenSSL"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
297 "svn": (has_svn, "subversion client and admin tools"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
298 "svn13": (has_svn13, "subversion client and admin tools >= 1.3"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
299 "svn15": (has_svn15, "subversion client and admin tools >= 1.5"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
300 "svn-bindings": (has_svn_bindings, "subversion python bindings"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
301 "symlink": (has_symlink, "symbolic links"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
302 "system-sh": (has_system_sh, "system() uses sh"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
303 "tic": (has_tic, "terminfo compiler"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
304 "tla": (has_tla, "GNU Arch tla client"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
305 "unix-permissions": (has_unix_permissions, "unix-style permissions"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
306 "windows": (has_windows, "Windows"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
307 "msys": (has_msys, "Windows with MSYS"),
8c6dc6a6f5d8 tests: pull in hghave
David M. Carr <david@carrclan.us>
parents:
diff changeset
308 }