annotate tests/hghave.py @ 44311:2b72c4ff8ed1

nodemap: use an intermediate "docket" file to carry small metadata This intermediate file will make mmapping, transaction and content validation easier. (Most of this usefulness will arrive gradually in later changeset). In particular it will become very useful to append new data are the end of raw file instead of rewriting on the file on each transaction. See in code comments for details. Differential Revision: https://phab.mercurial-scm.org/D7838
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 15 Jan 2020 15:47:50 +0100
parents e48a996d12bc
children 55c443fcb4fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43095
fb41ea2ea076 formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
1 from __future__ import absolute_import, print_function
27298
e1f55b50edcb tests: use absolute_import in hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27114
diff changeset
2
43352
14e3be17e5f5 hghave: verify we have a black that is new enough for our format
Augie Fackler <augie@google.com>
parents: 43347
diff changeset
3 import distutils.version
26137
99e8a9ff1f5f hghave: use subprocess instead of os.popen
Augie Fackler <augie@google.com>
parents: 26111
diff changeset
4 import os
5252
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
5 import re
22994
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
6 import socket
26137
99e8a9ff1f5f hghave: use subprocess instead of os.popen
Augie Fackler <augie@google.com>
parents: 26111
diff changeset
7 import stat
99e8a9ff1f5f hghave: use subprocess instead of os.popen
Augie Fackler <augie@google.com>
parents: 26111
diff changeset
8 import subprocess
4881
c51c9bc4579d Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
9 import sys
5072
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
10 import tempfile
4881
c51c9bc4579d Add hghave utility and run-tests.py support.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
11
5090
bf60e4bd6672 hghave: prefix temporary files with "hg-hghave-"
Patrick Mezard <pmezard@gmail.com>
parents: 5084
diff changeset
12 tempprefix = 'hg-hghave-'
bf60e4bd6672 hghave: prefix temporary files with "hg-hghave-"
Patrick Mezard <pmezard@gmail.com>
parents: 5084
diff changeset
13
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
14 checks = {
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
15 "true": (lambda: True, "yak shaving"),
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
16 "false": (lambda: False, "nail clipper"),
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
17 }
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
18
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
19 try:
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
20 import msvcrt
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
21
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
22 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
23 msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
24 except ImportError:
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
25 pass
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
26
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
27 stdout = getattr(sys.stdout, 'buffer', sys.stdout)
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
28 stderr = getattr(sys.stderr, 'buffer', sys.stderr)
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
29
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
30 if sys.version_info[0] >= 3:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
31
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
32 def _bytespath(p):
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
33 if p is None:
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
34 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
35 return p.encode('utf-8')
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
36
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
37 def _strpath(p):
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
38 if p is None:
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
39 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
40 return p.decode('utf-8')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
41
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
42
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
43 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
44
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
45 def _bytespath(p):
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
46 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
47
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
48 _strpath = _bytespath
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
49
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
50
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
51 def check(name, desc):
28757
93bf61913f33 hghave: add docstring for check
timeless <timeless@mozdev.org>
parents: 28756
diff changeset
52 """Registers a check function for a feature."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
53
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
54 def decorator(func):
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
55 checks[name] = (func, desc)
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
56 return func
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
57
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
58 return decorator
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
59
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
60
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
61 def checkvers(name, desc, vers):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
62 """Registers a check function for each of a series of versions.
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
63
43113
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
64 vers can be a list or an iterator.
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
65
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
66 Produces a series of feature checks that have the form <name><vers> without
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
67 any punctuation (even if there's punctuation in 'vers'; i.e. this produces
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
68 'py38', not 'py3.8' or 'py-38')."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
69
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
70 def decorator(func):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
71 def funcv(v):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
72 def f():
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
73 return func(v)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
74
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
75 return f
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
76
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
77 for v in vers:
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
78 v = str(v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
79 f = funcv(v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
80 checks['%s%s' % (name, v.replace('.', ''))] = (f, desc % v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
81 return func
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
82
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
83 return decorator
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
84
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
85
26067
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
86 def checkfeatures(features):
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
87 result = {
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
88 'error': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
89 'missing': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
90 'skipped': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
91 }
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
92
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
93 for feature in features:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
94 negate = feature.startswith('no-')
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
95 if negate:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
96 feature = feature[3:]
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
97
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
98 if feature not in checks:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
99 result['missing'].append(feature)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
100 continue
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
101
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
102 check, desc = checks[feature]
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
103 try:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
104 available = check()
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
105 except Exception:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
106 result['error'].append('hghave check failed: %s' % feature)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
107 continue
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
108
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
109 if not negate and not available:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
110 result['skipped'].append('missing feature: %s' % desc)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
111 elif negate and available:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
112 result['skipped'].append('system supports %s' % desc)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
113
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
114 return result
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
115
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
116
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
117 def require(features):
26067
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
118 """Require that features are available, exiting if not."""
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
119 result = checkfeatures(features)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
120
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
121 for missing in result['missing']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
122 stderr.write(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
123 ('skipped: unknown feature: %s\n' % missing).encode('utf-8')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
124 )
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
125 for msg in result['skipped']:
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
126 stderr.write(('skipped: %s\n' % msg).encode('utf-8'))
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
127 for msg in result['error']:
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
128 stderr.write(('%s\n' % msg).encode('utf-8'))
26067
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
129
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
130 if result['missing']:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
131 sys.exit(2)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
132
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
133 if result['skipped'] or result['error']:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
134 sys.exit(1)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
135
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
136
5302
961876838de0 hghave: detect cvs and cvsps availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
137 def matchoutput(cmd, regexp, ignorestatus=False):
27114
a636a46f5094 hghave.py: fix matchoutput documentation
timeless <timeless@mozdev.org>
parents: 26842
diff changeset
138 """Return the match object if cmd executes successfully and its output
5252
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
139 is matched by the supplied regular expression.
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
140 """
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
141 r = re.compile(regexp)
41366
fabb0224a599 hghave: let OSError with ENOENT through like any other
Martin von Zweigbergk <martinvonz@google.com>
parents: 41003
diff changeset
142 p = subprocess.Popen(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
143 cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
144 )
38179
6fb76897e066 hghave: avoid a deadlock reading the child process's output
Matt Harbison <matt_harbison@yahoo.com>
parents: 37415
diff changeset
145 s = p.communicate()[0]
6fb76897e066 hghave: avoid a deadlock reading the child process's output
Matt Harbison <matt_harbison@yahoo.com>
parents: 37415
diff changeset
146 ret = p.returncode
26137
99e8a9ff1f5f hghave: use subprocess instead of os.popen
Augie Fackler <augie@google.com>
parents: 26111
diff changeset
147 return (ignorestatus or not ret) and r.search(s)
5252
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
148
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
149
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
150 @check("baz", "GNU Arch baz client")
6078
ebc23d34102f convert: added gnu arch (baz) tests
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6063
diff changeset
151 def has_baz():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
152 return matchoutput('baz --version 2>&1', br'baz Bazaar version')
6078
ebc23d34102f convert: added gnu arch (baz) tests
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6063
diff changeset
153
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
154
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
155 @check("bzr", "Canonical's Bazaar client")
7053
209ef5f3534c convert: add bzr source
Marek Kubica <marek@xivilization.net>
parents: 6998
diff changeset
156 def has_bzr():
7061
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
157 try:
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
158 import bzrlib
29866
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
159 import bzrlib.bzrdir
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
160 import bzrlib.errors
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
161 import bzrlib.revision
29903
fe81c953f369 hghave: fix has_bzr() to not try to import RevisionSpec as module
Yuya Nishihara <yuya@tcha.org>
parents: 29873
diff changeset
162 import bzrlib.revisionspec
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
163
29903
fe81c953f369 hghave: fix has_bzr() to not try to import RevisionSpec as module
Yuya Nishihara <yuya@tcha.org>
parents: 29873
diff changeset
164 bzrlib.revisionspec.RevisionSpec
16684
e617876fe82d cleanup: "x != None" -> "x is not None"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
165 return bzrlib.__doc__ is not None
29903
fe81c953f369 hghave: fix has_bzr() to not try to import RevisionSpec as module
Yuya Nishihara <yuya@tcha.org>
parents: 29873
diff changeset
166 except (AttributeError, ImportError):
7061
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
167 return False
7053
209ef5f3534c convert: add bzr source
Marek Kubica <marek@xivilization.net>
parents: 6998
diff changeset
168
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
169
28760
cef86c3c82d2 hghave: use checkvers for bzr114
timeless <timeless@mozdev.org>
parents: 28759
diff changeset
170 @checkvers("bzr", "Canonical's Bazaar client >= %s", (1.14,))
cef86c3c82d2 hghave: use checkvers for bzr114
timeless <timeless@mozdev.org>
parents: 28759
diff changeset
171 def has_bzr_range(v):
42215
07e479ef7c96 hghave: deal with "rc" release
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41842
diff changeset
172 major, minor = v.split('rc')[0].split('.')[0:2]
8126
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
173 try:
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
174 import bzrlib
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
175
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
176 return bzrlib.__doc__ is not None and bzrlib.version_info[:2] >= (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
177 int(major),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
178 int(minor),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
179 )
8126
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
180 except ImportError:
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
181 return False
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
182
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
183
28880
f74eed3115fd hghave: add "chg" flag to skip tests that can't be compatible with chg
Yuya Nishihara <yuya@tcha.org>
parents: 28796
diff changeset
184 @check("chg", "running with chg")
f74eed3115fd hghave: add "chg" flag to skip tests that can't be compatible with chg
Yuya Nishihara <yuya@tcha.org>
parents: 28796
diff changeset
185 def has_chg():
f74eed3115fd hghave: add "chg" flag to skip tests that can't be compatible with chg
Yuya Nishihara <yuya@tcha.org>
parents: 28796
diff changeset
186 return 'CHGHG' in os.environ
f74eed3115fd hghave: add "chg" flag to skip tests that can't be compatible with chg
Yuya Nishihara <yuya@tcha.org>
parents: 28796
diff changeset
187
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
188
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
189 @check("cvs", "cvs client/server")
5302
961876838de0 hghave: detect cvs and cvsps availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
190 def has_cvs():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
191 re = br'Concurrent Versions System.*?server'
15568
08635f4e44be tests: skip cvs tests with msys on windows
Mads Kiilerich <mads@kiilerich.com>
parents: 15567
diff changeset
192 return matchoutput('cvs --version 2>&1', re) and not has_msys()
5302
961876838de0 hghave: detect cvs and cvsps availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
193
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
194
28756
45954a251a40 hghave: update cvs112 description
timeless <timeless@mozdev.org>
parents: 28591
diff changeset
195 @check("cvs112", "cvs client/server 1.12.* (not cvsnt)")
18285
9589227657bc hghave: introduce a test (unused) for cvs >= 1.12
Bryan O'Sullivan <bryano@fb.com>
parents: 17707
diff changeset
196 def has_cvs112():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
197 re = br'Concurrent Versions System \(CVS\) 1.12.*?server'
18285
9589227657bc hghave: introduce a test (unused) for cvs >= 1.12
Bryan O'Sullivan <bryano@fb.com>
parents: 17707
diff changeset
198 return matchoutput('cvs --version 2>&1', re) and not has_msys()
9589227657bc hghave: introduce a test (unused) for cvs >= 1.12
Bryan O'Sullivan <bryano@fb.com>
parents: 17707
diff changeset
199
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
200
28796
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
201 @check("cvsnt", "cvsnt client/server")
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
202 def has_cvsnt():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
203 re = br'Concurrent Versions System \(CVSNT\) (\d+).(\d+).*\(client/server\)'
28796
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
204 return matchoutput('cvsnt --version 2>&1', re)
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
205
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
206
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
207 @check("darcs", "darcs client")
5410
2daecf3d2582 hghave: detect darcs client
Patrick Mezard <pmezard@gmail.com>
parents: 5409
diff changeset
208 def has_darcs():
30297
d4db88a26ad5 hghave: check darcs version more strictly
Yuya Nishihara <yuya@tcha.org>
parents: 30242
diff changeset
209 return matchoutput('darcs --version', br'\b2\.([2-9]|\d{2})', True)
5410
2daecf3d2582 hghave: detect darcs client
Patrick Mezard <pmezard@gmail.com>
parents: 5409
diff changeset
210
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
211
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
212 @check("mtn", "monotone client (>= 1.0)")
6372
8f79820443a4 Add a test for monotone conversion
Patrick Mezard <pmezard@gmail.com>
parents: 6355
diff changeset
213 def has_mtn():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
214 return matchoutput('mtn --version', br'monotone', True) and not matchoutput(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
215 'mtn --version', br'monotone 0\.', True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
216 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
217
6372
8f79820443a4 Add a test for monotone conversion
Patrick Mezard <pmezard@gmail.com>
parents: 6355
diff changeset
218
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
219 @check("eol-in-paths", "end-of-lines in paths")
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
220 def has_eol_in_paths():
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
221 try:
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
222 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix, suffix='\n\r')
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
223 os.close(fd)
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
224 os.remove(path)
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
225 return True
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16685
diff changeset
226 except (IOError, OSError):
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
227 return False
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
228
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
229
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
230 @check("execbit", "executable bit")
5072
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
231 def has_executablebit():
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
232 try:
16320
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
233 EXECFLAGS = stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
234 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix)
16320
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
235 try:
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
236 os.close(fh)
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25413
diff changeset
237 m = os.stat(fn).st_mode & 0o777
16320
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
238 new_file_has_exec = m & EXECFLAGS
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
239 os.chmod(fn, m ^ EXECFLAGS)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
240 exec_flags_cannot_flip = (os.stat(fn).st_mode & 0o777) == m
16320
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
241 finally:
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
242 os.unlink(fn)
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
243 except (IOError, OSError):
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
244 # we don't care, the user probably won't be able to commit anyway
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
245 return False
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
246 return not (new_file_has_exec or exec_flags_cannot_flip)
5072
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
247
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
248
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
249 @check("icasefs", "case insensitive file system")
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
250 def has_icasefs():
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
251 # Stolen from mercurial.util
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
252 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
253 os.close(fd)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
254 try:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
255 s1 = os.stat(path)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
256 d, b = os.path.split(path)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
257 p2 = os.path.join(d, b.upper())
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
258 if path == p2:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
259 p2 = os.path.join(d, b.lower())
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
260 try:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
261 s2 = os.stat(p2)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
262 return s2 == s1
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16685
diff changeset
263 except OSError:
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
264 return False
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
265 finally:
6998
ddfcefab8b97 merge with -stable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6806 6996
diff changeset
266 os.remove(path)
ddfcefab8b97 merge with -stable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6806 6996
diff changeset
267
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
268
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
269 @check("fifo", "named pipes")
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
270 def has_fifo():
16969
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
271 if getattr(os, "mkfifo", None) is None:
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
272 return False
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
273 name = tempfile.mktemp(dir='.', prefix=tempprefix)
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
274 try:
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
275 os.mkfifo(name)
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
276 os.unlink(name)
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
277 return True
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
278 except OSError:
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
279 return False
5074
e86788af599a hghave: detect support for EOL in paths.
Patrick Mezard <pmezard@gmail.com>
parents: 5072
diff changeset
280
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
281
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
282 @check("killdaemons", 'killdaemons.py support')
17467
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
283 def has_killdaemons():
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
284 return True
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
285
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
286
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
287 @check("cacheable", "cacheable filesystem")
14927
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
288 def has_cacheable_fs():
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
289 from mercurial import util
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
290
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
291 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
14927
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
292 os.close(fd)
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
293 try:
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
294 return util.cachestat(path).cacheable()
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
295 finally:
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
296 os.remove(path)
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
297
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
298
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
299 @check("lsprof", "python lsprof module")
5099
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
300 def has_lsprof():
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
301 try:
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
302 import _lsprof
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
303
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
304 _lsprof.Profiler # silence unused import warning
5099
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
305 return True
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
306 except ImportError:
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
307 return False
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
308
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
309
44279
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
310 def _gethgversion():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
311 m = matchoutput('hg --version --quiet 2>&1', br'(\d+)\.(\d+)')
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
312 if not m:
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
313 return (0, 0)
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
314 return (int(m.group(1)), int(m.group(2)))
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
315
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
316
44279
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
317 _hgversion = None
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
318
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
319
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
320 def gethgversion():
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
321 global _hgversion
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
322 if _hgversion is None:
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
323 _hgversion = _gethgversion()
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
324 return _hgversion
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
325
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
326
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
327 @checkvers(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
328 "hg", "Mercurial >= %s", list([(1.0 * x) / 10 for x in range(9, 99)])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
329 )
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
330 def has_hg_range(v):
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
331 major, minor = v.split('.')[0:2]
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
332 return gethgversion() >= (int(major), int(minor))
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
333
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
334
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
335 @check("hg08", "Mercurial >= 0.8")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
336 def has_hg08():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
337 if checks["hg09"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
338 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
339 return matchoutput('hg help annotate 2>&1', '--date')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
340
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
341
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
342 @check("hg07", "Mercurial >= 0.7")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
343 def has_hg07():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
344 if checks["hg08"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
345 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
346 return matchoutput('hg --version --quiet 2>&1', 'Mercurial Distributed SCM')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
347
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
348
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
349 @check("hg06", "Mercurial >= 0.6")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
350 def has_hg06():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
351 if checks["hg07"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
352 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
353 return matchoutput('hg --version --quiet 2>&1', 'Mercurial version')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
354
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
355
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
356 @check("gettext", "GNU Gettext (msgfmt)")
13442
bb107a31820e test-i18n: make test conditional on msgfmt availability
Martin Geisler <mg@lazybytes.net>
parents: 13418
diff changeset
357 def has_gettext():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
358 return matchoutput('msgfmt --version', br'GNU gettext-tools')
13442
bb107a31820e test-i18n: make test conditional on msgfmt availability
Martin Geisler <mg@lazybytes.net>
parents: 13418
diff changeset
359
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
360
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
361 @check("git", "git command line client")
5218
4fa0f2dff643 hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents: 5103
diff changeset
362 def has_git():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
363 return matchoutput('git --version 2>&1', br'^git version')
5218
4fa0f2dff643 hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents: 5103
diff changeset
364
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
365
32901
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
366 def getgitversion():
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
367 m = matchoutput('git --version 2>&1', br'git version (\d+)\.(\d+)')
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
368 if not m:
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
369 return (0, 0)
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
370 return (int(m.group(1)), int(m.group(2)))
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
371
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
372
35139
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
373 # https://github.com/git-lfs/lfs-test-server
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
374 @check("lfs-test-server", "git-lfs test server")
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
375 def has_lfsserver():
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
376 exe = 'lfs-test-server'
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
377 if has_windows():
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
378 exe = 'lfs-test-server.exe'
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
379 return any(
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
380 os.access(os.path.join(path, exe), os.X_OK)
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
381 for path in os.environ["PATH"].split(os.pathsep)
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
382 )
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
383
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
384
32901
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
385 @checkvers("git", "git client (with ext::sh support) version >= %s", (1.9,))
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
386 def has_git_range(v):
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
387 major, minor = v.split('.')[0:2]
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
388 return getgitversion() >= (int(major), int(minor))
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
389
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
390
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
391 @check("docutils", "Docutils text processing library")
10971
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
392 def has_docutils():
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
393 try:
28779
0970ebec29b4 hghave: replace relative import of docutils.core
Yuya Nishihara <yuya@tcha.org>
parents: 28761
diff changeset
394 import docutils.core
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
395
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
396 docutils.core.publish_cmdline # silence unused import
10971
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
397 return True
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
398 except ImportError:
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
399 return False
9446
57d682d7d2da test-gendoc: test documentation generation
Martin Geisler <mg@lazybytes.net>
parents: 9395
diff changeset
400
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
401
14050
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
402 def getsvnversion():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
403 m = matchoutput('svn --version --quiet 2>&1', br'^(\d+)\.(\d+)')
14050
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
404 if not m:
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
405 return (0, 0)
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
406 return (int(m.group(1)), int(m.group(2)))
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
407
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
408
28759
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
409 @checkvers("svn", "subversion client and admin tools >= %s", (1.3, 1.5))
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
410 def has_svn_range(v):
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
411 major, minor = v.split('.')[0:2]
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
412 return getsvnversion() >= (int(major), int(minor))
15346
53f37b24f26a tests: check for svn >= 1.3 and >= 1.5 in tests that require those versions
Thomas Arendsen Hein <thomas@intevation.de>
parents: 14927
diff changeset
413
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
414
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
415 @check("svn", "subversion client and admin tools")
5253
d82ebcdf20e1 hghave: detect subversion client and admin tools availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
416 def has_svn():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
417 return matchoutput('svn --version 2>&1', br'^svn, version') and matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
418 'svnadmin --version 2>&1', br'^svnadmin, version'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
419 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
420
5253
d82ebcdf20e1 hghave: detect subversion client and admin tools availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
421
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
422 @check("svn-bindings", "subversion python bindings")
5254
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
423 def has_svn_bindings():
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
424 try:
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
425 import svn.core
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
426
7315
408cf9eb9e5d tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7061
diff changeset
427 version = svn.core.SVN_VER_MAJOR, svn.core.SVN_VER_MINOR
408cf9eb9e5d tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7061
diff changeset
428 if version < (1, 4):
408cf9eb9e5d tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7061
diff changeset
429 return False
5254
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
430 return True
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
431 except ImportError:
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
432 return False
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
433
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
434
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
435 @check("p4", "Perforce server and client")
7823
11efa41037e2 convert: Perforce source for conversion to Mercurial
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7773
diff changeset
436 def has_p4():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
437 return matchoutput('p4 -V', br'Rev\. P4/') and matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
438 'p4d -V', br'Rev\. P4D/'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
439 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
440
7823
11efa41037e2 convert: Perforce source for conversion to Mercurial
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7773
diff changeset
441
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
442 @check("symlink", "symbolic links")
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
443 def has_symlink():
43455
6792da448437 hghave: disallow symlinks on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 43412
diff changeset
444 # mercurial.windows.checklink() is a hard 'no' at the moment
6792da448437 hghave: disallow symlinks on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 43412
diff changeset
445 if os.name == 'nt' or getattr(os, "symlink", None) is None:
16319
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
446 return False
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
447 name = tempfile.mktemp(dir='.', prefix=tempprefix)
16319
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
448 try:
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
449 os.symlink(".", name)
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
450 os.unlink(name)
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
451 return True
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
452 except (OSError, AttributeError):
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
453 return False
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
454
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
455
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
456 @check("hardlink", "hardlinks")
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
457 def has_hardlink():
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
458 from mercurial import util
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
459
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
460 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
461 os.close(fh)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
462 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
463 try:
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
464 util.oslink(_bytespath(fn), _bytespath(name))
25090
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
465 os.unlink(name)
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
466 return True
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
467 except OSError:
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
468 return False
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
469 finally:
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
470 os.unlink(fn)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
471
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
472
31576
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
473 @check("hardlink-whitelisted", "hardlinks on whitelisted filesystems")
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
474 def has_hardlink_whitelisted():
31674
b33e352c365c hghave: use util.getfstype
Yuya Nishihara <yuya@tcha.org>
parents: 31576
diff changeset
475 from mercurial import util
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
476
31678
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
477 try:
36942
bf73012877a4 hghave: fix hardlink-whitelisted check on Python 3
Augie Fackler <augie@google.com>
parents: 36941
diff changeset
478 fstype = util.getfstype(b'.')
31678
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
479 except OSError:
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
480 return False
31576
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
481 return fstype in util._hardlinkfswhitelist
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
482
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
483
30230
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
484 @check("rmcwd", "can remove current working directory")
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
485 def has_rmcwd():
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
486 ocwd = os.getcwd()
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
487 temp = tempfile.mkdtemp(dir='.', prefix=tempprefix)
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
488 try:
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
489 os.chdir(temp)
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
490 # On Linux, 'rmdir .' isn't allowed, but the other names are okay.
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
491 # On Solaris and Windows, the cwd can't be removed by any names.
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
492 os.rmdir(os.getcwd())
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
493 return True
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
494 except OSError:
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
495 return False
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
496 finally:
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
497 os.chdir(ocwd)
30242
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
498 # clean up temp dir on platforms where cwd can't be removed
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
499 try:
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
500 os.rmdir(temp)
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
501 except OSError:
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
502 pass
30230
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
503
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
504
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
505 @check("tla", "GNU Arch tla client")
6079
ea34059b89de convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6078
diff changeset
506 def has_tla():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
507 return matchoutput('tla --version 2>&1', br'The GNU Arch Revision')
6079
ea34059b89de convert: added GNU Arch (tla) tests and related fixes
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6078
diff changeset
508
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
509
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
510 @check("gpg", "gpg client")
8809
6fce36336e42 gpg: add test
Brendan Cully <brendan@kublai.com>
parents: 8213
diff changeset
511 def has_gpg():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
512 return matchoutput('gpg --version 2>&1', br'GnuPG')
8809
6fce36336e42 gpg: add test
Brendan Cully <brendan@kublai.com>
parents: 8213
diff changeset
513
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
514
29790
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
515 @check("gpg2", "gpg client v2")
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
516 def has_gpg2():
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
517 return matchoutput('gpg --version 2>&1', br'GnuPG[^0-9]+2\.')
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
518
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
519
29873
80ba176bad62 test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected
Yuya Nishihara <yuya@tcha.org>
parents: 29867
diff changeset
520 @check("gpg21", "gpg client v2.1+")
80ba176bad62 test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected
Yuya Nishihara <yuya@tcha.org>
parents: 29867
diff changeset
521 def has_gpg21():
80ba176bad62 test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected
Yuya Nishihara <yuya@tcha.org>
parents: 29867
diff changeset
522 return matchoutput('gpg --version 2>&1', br'GnuPG[^0-9]+2\.(?!0)')
80ba176bad62 test-gpg: start gpg-agent by gpg-connect-agent only if GnuPG v2.1+ detected
Yuya Nishihara <yuya@tcha.org>
parents: 29867
diff changeset
523
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
524
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
525 @check("unix-permissions", "unix-style permissions")
6063
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
526 def has_unix_permissions():
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
527 d = tempfile.mkdtemp(dir='.', prefix=tempprefix)
6063
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
528 try:
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
529 fname = os.path.join(d, 'foo')
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25413
diff changeset
530 for umask in (0o77, 0o07, 0o22):
6063
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
531 os.umask(umask)
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
532 f = open(fname, 'w')
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
533 f.close()
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
534 mode = os.stat(fname).st_mode
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
535 os.unlink(fname)
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25413
diff changeset
536 if mode & 0o777 != ~umask & 0o666:
6063
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
537 return False
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
538 return True
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
539 finally:
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
540 os.rmdir(d)
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
541
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
542
22994
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
543 @check("unix-socket", "AF_UNIX socket family")
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
544 def has_unix_socket():
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
545 return getattr(socket, 'AF_UNIX', None) is not None
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
546
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
547
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
548 @check("root", "root permissions")
20008
e54a078153f7 tests: skip tests that require not having root (issue4089)
Matt Mackall <mpm@selenic.com>
parents: 19931
diff changeset
549 def has_root():
20114
390aff33c2f9 tests: fix `hghave root` on windows
Simon Heimberg <simohe@besonet.ch>
parents: 20008
diff changeset
550 return getattr(os, 'geteuid', None) and os.geteuid() == 0
20008
e54a078153f7 tests: skip tests that require not having root (issue4089)
Matt Mackall <mpm@selenic.com>
parents: 19931
diff changeset
551
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
552
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
553 @check("pyflakes", "Pyflakes python linter")
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents: 14050
diff changeset
554 def has_pyflakes():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
555 return matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
556 "sh -c \"echo 'import re' 2>&1 | pyflakes\"",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
557 br"<stdin>:1: 're' imported but unused",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
558 True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
559 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
560
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents: 14050
diff changeset
561
31413
aa797bd54f44 test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30559
diff changeset
562 @check("pylint", "Pylint python linter")
aa797bd54f44 test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30559
diff changeset
563 def has_pylint():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
564 return matchoutput("pylint --help", br"Usage: pylint", True)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
565
31413
aa797bd54f44 test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30559
diff changeset
566
34696
15b561fffde5 hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents: 34401
diff changeset
567 @check("clang-format", "clang-format C code formatter")
15b561fffde5 hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents: 34401
diff changeset
568 def has_clang_format():
38703
b93dc48e74ad hghave: require clang-format >= 6 due to output change
Yuya Nishihara <yuya@tcha.org>
parents: 38239
diff changeset
569 m = matchoutput('clang-format --version', br'clang-format version (\d)')
b93dc48e74ad hghave: require clang-format >= 6 due to output change
Yuya Nishihara <yuya@tcha.org>
parents: 38239
diff changeset
570 # style changed somewhere between 4.x and 6.x
b93dc48e74ad hghave: require clang-format >= 6 due to output change
Yuya Nishihara <yuya@tcha.org>
parents: 38239
diff changeset
571 return m and int(m.group(1)) >= 6
34696
15b561fffde5 hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents: 34401
diff changeset
572
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
573
35043
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
574 @check("jshint", "JSHint static code analysis tool")
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
575 def has_jshint():
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
576 return matchoutput("jshint --version 2>&1", br"jshint v")
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
577
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
578
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
579 @check("pygments", "Pygments source highlighting library")
6355
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
580 def has_pygments():
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
581 try:
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
582 import pygments
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
583
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
584 pygments.highlight # silence unused import warning
6355
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
585 return True
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
586 except ImportError:
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
587 return False
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
588
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
589
44119
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
590 @check("pygments25", "Pygments version >= 2.5")
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
591 def pygments25():
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
592 try:
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
593 import pygments
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
594
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
595 v = pygments.__version__
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
596 except ImportError:
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
597 return False
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
598
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
599 parts = v.split(".")
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
600 major = int(parts[0])
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
601 minor = int(parts[1])
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
602
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
603 return (major, minor) >= (2, 5)
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
604
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
605
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
606 @check("outer-repo", "outer repo")
7429
dbc40381620e tests: Skip tests if they will fail because of outer repo
Mads Kiilerich <mads@kiilerich.com>
parents: 7315
diff changeset
607 def has_outer_repo():
17016
468a950aebc3 tests: hghave outer-repo should be true even if a bad repo is found
Mads Kiilerich <mads@kiilerich.com>
parents: 16971
diff changeset
608 # failing for other reasons than 'no repo' imply that there is a repo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
609 return not matchoutput('hg root 2>&1', br'abort: no repository found', True)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
610
7429
dbc40381620e tests: Skip tests if they will fail because of outer repo
Mads Kiilerich <mads@kiilerich.com>
parents: 7315
diff changeset
611
28591
f29cab5c519c hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28582
diff changeset
612 @check("ssl", "ssl module available")
12740
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
613 def has_ssl():
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
614 try:
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
615 import ssl
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
616
28591
f29cab5c519c hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28582
diff changeset
617 ssl.CERT_NONE
12740
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
618 return True
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
619 except ImportError:
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
620 return False
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
621
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
622
25413
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
623 @check("sslcontext", "python >= 2.7.9 ssl")
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
624 def has_sslcontext():
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
625 try:
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
626 import ssl
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
627
25413
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
628 ssl.SSLContext
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
629 return True
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
630 except (ImportError, AttributeError):
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
631 return False
4d705f6a3c35 test-https: test basic functions of client certificate authentication
Yuya Nishihara <yuya@tcha.org>
parents: 25106
diff changeset
632
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
633
24289
07fafcd4bc74 test-https: enable dummycert test only if Apple python is used (issue4500)
Yuya Nishihara <yuya@tcha.org>
parents: 23825
diff changeset
634 @check("defaultcacerts", "can verify SSL certs by system's CA certs store")
07fafcd4bc74 test-https: enable dummycert test only if Apple python is used (issue4500)
Yuya Nishihara <yuya@tcha.org>
parents: 23825
diff changeset
635 def has_defaultcacerts():
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
636 from mercurial import sslutil, ui as uimod
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
637
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30441
diff changeset
638 ui = uimod.ui.load()
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
639 return sslutil._defaultcacerts(ui) or sslutil._canloaddefaultcerts
24289
07fafcd4bc74 test-https: enable dummycert test only if Apple python is used (issue4500)
Yuya Nishihara <yuya@tcha.org>
parents: 23825
diff changeset
640
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
641
29481
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
642 @check("defaultcacertsloaded", "detected presence of loaded system CA certs")
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
643 def has_defaultcacertsloaded():
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
644 import ssl
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
645 from mercurial import sslutil, ui as uimod
29481
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
646
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
647 if not has_defaultcacerts():
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
648 return False
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
649 if not has_sslcontext():
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
650 return False
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
651
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30441
diff changeset
652 ui = uimod.ui.load()
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
653 cafile = sslutil._defaultcacerts(ui)
29481
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
654 ctx = ssl.create_default_context()
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
655 if cafile:
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
656 ctx.load_verify_locations(cafile=cafile)
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
657 else:
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
658 ctx.load_default_certs()
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
659
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
660 return len(ctx.get_ca_certs()) > 0
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
661
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
662
29601
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
663 @check("tls1.2", "TLS 1.2 protocol support")
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
664 def has_tls1_2():
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
665 from mercurial import sslutil
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
666
41381
423a6b2ddafa tests: add b'' when testing for tls1.2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41366
diff changeset
667 return b'tls1.2' in sslutil.supportedprotocols
29601
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
668
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
669
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
670 @check("windows", "Windows")
15444
e1f05d7a8c7b tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents: 15441
diff changeset
671 def has_windows():
e1f05d7a8c7b tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents: 15441
diff changeset
672 return os.name == 'nt'
e1f05d7a8c7b tests: use 'hghave no-windows' to avoid testing reserved file names on windows
Mads Kiilerich <mads@kiilerich.com>
parents: 15441
diff changeset
673
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
674
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
675 @check("system-sh", "system() uses sh")
15445
7cbb81c47025 tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents: 15444
diff changeset
676 def has_system_sh():
7cbb81c47025 tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents: 15444
diff changeset
677 return os.name != 'nt'
7cbb81c47025 tests: use 'hghave system-sh' to guard tests that requires sh in system()
Mads Kiilerich <mads@kiilerich.com>
parents: 15444
diff changeset
678
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
679
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
680 @check("serve", "platform and python can manage 'hg serve -d'")
15446
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 15445
diff changeset
681 def has_serve():
32856
41f99a90675d hghave: enable 'serve' on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32770
diff changeset
682 return True
15446
c5c9ca3719f9 tests: use 'hghave serve' to guard tests that requires serve daemon management
Mads Kiilerich <mads@kiilerich.com>
parents: 15445
diff changeset
683
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
684
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
685 @check("test-repo", "running tests from repository")
21208
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
686 def has_test_repo():
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
687 t = os.environ["TESTDIR"]
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
688 return os.path.isdir(os.path.join(t, "..", ".hg"))
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
689
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
690
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
691 @check("tic", "terminfo compiler and curses module")
15539
d09ea5bbc9a4 tests: skip color test on platforms without tic
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
692 def has_tic():
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
693 try:
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
694 import curses
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
695
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
696 curses.COLOR_BLUE
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
697 return matchoutput('test -x "`which tic`"', br'')
44264
d3f776c4760e py3: catch AttributeError too with ImportError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44119
diff changeset
698 except (ImportError, AttributeError):
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
699 return False
15539
d09ea5bbc9a4 tests: skip color test on platforms without tic
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
700
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
701
43699
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
702 @check("xz", "xz compression utility")
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
703 def has_xz():
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
704 # When Windows invokes a subprocess in shell mode, it uses `cmd.exe`, which
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
705 # only knows `where`, not `which`. So invoke MSYS shell explicitly.
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
706 return matchoutput("sh -c 'test -x \"`which xz`\"'", b'')
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
707
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
708
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
709 @check("msys", "Windows with MSYS")
15567
8b84d040d9f9 tests: introduce 'hghave msys' to skip tests that would fail because of msys
Mads Kiilerich <mads@kiilerich.com>
parents: 15539
diff changeset
710 def has_msys():
8b84d040d9f9 tests: introduce 'hghave msys' to skip tests that would fail because of msys
Mads Kiilerich <mads@kiilerich.com>
parents: 15539
diff changeset
711 return os.getenv('MSYSTEM')
8b84d040d9f9 tests: introduce 'hghave msys' to skip tests that would fail because of msys
Mads Kiilerich <mads@kiilerich.com>
parents: 15539
diff changeset
712
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
713
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
714 @check("aix", "AIX")
19092
8c560ad1cdc4 tests: AIX can't handle negative date in test-dirstate.t
Jim Hague <jim.hague@acm.org>
parents: 18285
diff changeset
715 def has_aix():
8c560ad1cdc4 tests: AIX can't handle negative date in test-dirstate.t
Jim Hague <jim.hague@acm.org>
parents: 18285
diff changeset
716 return sys.platform.startswith("aix")
8c560ad1cdc4 tests: AIX can't handle negative date in test-dirstate.t
Jim Hague <jim.hague@acm.org>
parents: 18285
diff changeset
717
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
718
22575
d7f7f1860f00 ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents: 22198
diff changeset
719 @check("osx", "OS X")
d7f7f1860f00 ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents: 22198
diff changeset
720 def has_osx():
d7f7f1860f00 ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents: 22198
diff changeset
721 return sys.platform == 'darwin'
d7f7f1860f00 ssl: on OS X, use a dummy cert to trick Python/OpenSSL to use system CA certs
Mads Kiilerich <madski@unity3d.com>
parents: 22198
diff changeset
722
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
723
29026
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
724 @check("osxpackaging", "OS X packaging tools")
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
725 def has_osxpackaging():
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
726 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
727 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
728 matchoutput('pkgbuild', br'Usage: pkgbuild ', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
729 and matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
730 'productbuild', br'Usage: productbuild ', ignorestatus=1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
731 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
732 and matchoutput('lsbom', br'Usage: lsbom', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
733 and matchoutput('xar --help', br'Usage: xar', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
734 )
29026
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
735 except ImportError:
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
736 return False
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
737
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
738
34885
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
739 @check('linuxormacos', 'Linux or MacOS')
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
740 def has_linuxormacos():
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
741 # This isn't a perfect test for MacOS. But it is sufficient for our needs.
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
742 return sys.platform.startswith(('linux', 'darwin'))
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
743
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
744
26111
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
745 @check("docker", "docker support")
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
746 def has_docker():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
747 pat = br'A self-sufficient runtime for'
26111
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
748 if matchoutput('docker --help', pat):
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
749 if 'linux' not in sys.platform:
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
750 # TODO: in theory we should be able to test docker-based
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
751 # package creation on non-linux using boot2docker, but in
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
752 # practice that requires extra coordination to make sure
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
753 # $TESTTEMP is going to be visible at the same path to the
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
754 # boot2docker VM. If we figure out how to verify that, we
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
755 # can use the following instead of just saying False:
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
756 # return 'DOCKER_HOST' in os.environ
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
757 return False
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
758
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
759 return True
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
760 return False
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
761
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
762
26110
2dcfb98c5314 hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents: 26109
diff changeset
763 @check("debhelper", "debian packaging tools")
2dcfb98c5314 hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents: 26109
diff changeset
764 def has_debhelper():
34394
dbf83230e8be hghave: fix dpkg --version check to work on recent dpkg versions
Kyle Lippincott <spectral@google.com>
parents: 33697
diff changeset
765 # Some versions of dpkg say `dpkg', some say 'dpkg' (` vs ' on the first
dbf83230e8be hghave: fix dpkg --version check to work on recent dpkg versions
Kyle Lippincott <spectral@google.com>
parents: 33697
diff changeset
766 # quote), so just accept anything in that spot.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
767 dpkg = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
768 'dpkg --version', br"Debian .dpkg' package management program"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
769 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
770 dh = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
771 'dh --help', br'dh is a part of debhelper.', ignorestatus=True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
772 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
773 dh_py2 = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
774 'dh_python2 --help', br'other supported Python versions'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
775 )
34399
200eadbcf0b0 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents: 34394
diff changeset
776 # debuild comes from the 'devscripts' package, though you might want
200eadbcf0b0 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents: 34394
diff changeset
777 # the 'build-debs' package instead, which has a dependency on devscripts.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
778 debuild = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
779 'debuild --help', br'to run debian/rules with given parameter'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
780 )
34399
200eadbcf0b0 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents: 34394
diff changeset
781 return dpkg and dh and dh_py2 and debuild
26110
2dcfb98c5314 hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents: 26109
diff changeset
782
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
783
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
784 @check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
785 "debdeps", "debian build dependencies (run dpkg-checkbuilddeps in contrib/)"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
786 )
34401
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
787 def has_debdeps():
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
788 # just check exit status (ignoring output)
38009
e51c91c14a07 packaging: move contrib/debian to contrib/packaging/
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37415
diff changeset
789 path = '%s/../contrib/packaging/debian/control' % os.environ['TESTDIR']
34401
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
790 return matchoutput('dpkg-checkbuilddeps %s' % path, br'')
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
791
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
792
29867
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
793 @check("demandimport", "demandimport enabled")
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
794 def has_demandimport():
34840
88624b40a9cb hghave: disable demandimport when chg is running
Saurabh Singh <singhsrb@fb.com>
parents: 34696
diff changeset
795 # chg disables demandimport intentionally for performance wins.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
796 return (not has_chg()) and os.environ.get('HGDEMANDIMPORT') != 'disable'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
797
29867
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
798
43113
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
799 # Add "py27", "py35", ... as possible feature checks. Note that there's no
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
800 # punctuation here.
41443
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
801 @checkvers("py", "Python >= %s", (2.7, 3.5, 3.6, 3.7, 3.8, 3.9))
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
802 def has_python_range(v):
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
803 major, minor = v.split('.')[0:2]
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
804 py_major, py_minor = sys.version_info.major, sys.version_info.minor
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
805
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
806 return (py_major, py_minor) >= (int(major), int(minor))
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
807
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
808
40263
8cf459d8b111 py3: use py3 as the test tag, dropping the k
Martijn Pieters <mj@octobus.net>
parents: 39759
diff changeset
809 @check("py3", "running with Python 3.x")
8cf459d8b111 py3: use py3 as the test tag, dropping the k
Martijn Pieters <mj@octobus.net>
parents: 39759
diff changeset
810 def has_py3():
19931
8bbe208c1812 hghave: add "py3k" feature to check whether test runs with Python 3.x
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 19930
diff changeset
811 return 3 == sys.version_info[0]
25859
1619563959b3 tests: disable test of buffer overflow in parsers.c if --pure
Yuya Nishihara <yuya@tcha.org>
parents: 25658
diff changeset
812
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
813
28582
cdbc25306696 run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28383
diff changeset
814 @check("py3exe", "a Python 3.x interpreter is available")
cdbc25306696 run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28383
diff changeset
815 def has_python3exe():
39351
4cfd1eebe6aa hghave: move from requiring the PYTHON3 env var to looking for `python3`
Augie Fackler <augie@google.com>
parents: 38703
diff changeset
816 return matchoutput('python3 -V', br'^Python 3.(5|6|7|8|9)')
28582
cdbc25306696 run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28383
diff changeset
817
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
818
25859
1619563959b3 tests: disable test of buffer overflow in parsers.c if --pure
Yuya Nishihara <yuya@tcha.org>
parents: 25658
diff changeset
819 @check("pure", "running with pure Python code")
1619563959b3 tests: disable test of buffer overflow in parsers.c if --pure
Yuya Nishihara <yuya@tcha.org>
parents: 25658
diff changeset
820 def has_pure():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
821 return any(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
822 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
823 os.environ.get("HGMODULEPOLICY") == "py",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
824 os.environ.get("HGTEST_RUN_TESTS_PURE") == "--pure",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
825 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
826 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
827
26109
bad09bd22b6a run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents: 26068
diff changeset
828
32474
c2b7fb580794 tests: hint how to run slow tests when rejecting
Kyle Lippincott <spectral@google.com>
parents: 32245
diff changeset
829 @check("slow", "allow slow tests (use --allow-slow-tests)")
26109
bad09bd22b6a run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents: 26068
diff changeset
830 def has_slow():
bad09bd22b6a run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents: 26068
diff changeset
831 return os.environ.get('HGTEST_SLOW') == 'slow'
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
832
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
833
28383
e13e0e189990 hghave: improve description of Hypothesis
timeless <timeless@mozdev.org>
parents: 28126
diff changeset
834 @check("hypothesis", "Hypothesis automated test generation")
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
835 def has_hypothesis():
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
836 try:
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
837 import hypothesis
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
838
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
839 hypothesis.given
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
840 return True
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
841 except ImportError:
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
842 return False
29843
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
843
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
844
29843
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
845 @check("unziplinks", "unzip(1) understands and extracts symlinks")
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
846 def unzip_understands_symlinks():
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
847 return matchoutput('unzip --help', br'Info-ZIP')
30441
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
848
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
849
30441
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
850 @check("zstd", "zstd Python module available")
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
851 def has_zstd():
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
852 try:
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
853 import mercurial.zstd
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
854
30441
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
855 mercurial.zstd.__version__
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
856 return True
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
857 except ImportError:
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
858 return False
31964
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
859
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
860
31964
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
861 @check("devfull", "/dev/full special file")
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
862 def has_dev_full():
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
863 return os.path.exists('/dev/full')
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
864
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
865
43412
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
866 @check("ensurepip", "ensurepip module")
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
867 def has_ensurepip():
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
868 try:
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
869 import ensurepip
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
870
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
871 ensurepip.bootstrap
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
872 return True
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
873 except ImportError:
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
874 return False
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
875
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
876
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
877 @check("virtualenv", "Python virtualenv support")
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
878 def has_virtualenv():
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
879 try:
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
880 import virtualenv
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
881
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
882 virtualenv.ACTIVATE_SH
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
883 return True
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
884 except ImportError:
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
885 return False
32770
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
886
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
887
32770
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
888 @check("fsmonitor", "running tests with fsmonitor")
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
889 def has_fsmonitor():
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
890 return 'HGFSMONITOR_TESTS' in os.environ
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
891
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
892
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
893 @check("fuzzywuzzy", "Fuzzy string matching library")
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
894 def has_fuzzywuzzy():
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
895 try:
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
896 import fuzzywuzzy
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
897
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
898 fuzzywuzzy.__version__
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
899 return True
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
900 except ImportError:
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
901 return False
35668
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
902
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
903
35668
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
904 @check("clang-libfuzzer", "clang new enough to include libfuzzer")
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
905 def has_clang_libfuzzer():
41543
dddf53473315 tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41443
diff changeset
906 mat = matchoutput('clang --version', br'clang version (\d)')
35668
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
907 if mat:
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
908 # libfuzzer is new in clang 6
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
909 return int(mat.group(1)) > 5
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
910 return False
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
911
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
912
38236
a6347ae6168d test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents: 38009
diff changeset
913 @check("clang-6.0", "clang 6.0 with version suffix (libfuzzer included)")
a6347ae6168d test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents: 38009
diff changeset
914 def has_clang60():
41543
dddf53473315 tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41443
diff changeset
915 return matchoutput('clang-6.0 --version', br'clang version 6\.')
38236
a6347ae6168d test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents: 38009
diff changeset
916
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
917
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
918 @check("xdiff", "xdiff algorithm")
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
919 def has_xdiff():
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
920 try:
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
921 from mercurial import policy
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
922
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
923 bdiff = policy.importmod('bdiff')
36941
3f7bbce8fbaa hghave: fix xdiff check on Python 3
Augie Fackler <augie@google.com>
parents: 36694
diff changeset
924 return bdiff.xdiffblocks(b'', b'') == [(0, 0, 0, 0)]
36694
1d06407d0ee9 hghave: remove unused "as ex" in exception block
Augie Fackler <augie@google.com>
parents: 36678
diff changeset
925 except (ImportError, AttributeError):
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
926 return False
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
927
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
928
37342
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
929 @check('extraextensions', 'whether tests are running with extra extensions')
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
930 def has_extraextensions():
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
931 return 'HGTESTEXTRAEXTENSIONS' in os.environ
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
932
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
933
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
934 def getrepofeatures():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
935 """Obtain set of repository features in use.
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
936
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
937 HGREPOFEATURES can be used to define or remove features. It contains
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
938 a space-delimited list of feature strings. Strings beginning with ``-``
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
939 mean to remove.
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
940 """
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
941 # Default list provided by core.
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
942 features = {
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
943 'bundlerepo',
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
944 'revlogstore',
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
945 'fncache',
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
946 }
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
947
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
948 # Features that imply other features.
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
949 implies = {
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
950 'simplestore': ['-revlogstore', '-bundlerepo', '-fncache'],
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
951 }
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
952
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
953 for override in os.environ.get('HGREPOFEATURES', '').split(' '):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
954 if not override:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
955 continue
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
956
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
957 if override.startswith('-'):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
958 if override[1:] in features:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
959 features.remove(override[1:])
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
960 else:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
961 features.add(override)
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
962
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
963 for imply in implies.get(override, []):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
964 if imply.startswith('-'):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
965 if imply[1:] in features:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
966 features.remove(imply[1:])
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
967 else:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
968 features.add(imply)
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
969
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
970 return features
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
971
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
972
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
973 @check('reporevlogstore', 'repository using the default revlog store')
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
974 def has_reporevlogstore():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
975 return 'revlogstore' in getrepofeatures()
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
976
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
977
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
978 @check('reposimplestore', 'repository using simple storage extension')
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
979 def has_reposimplestore():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
980 return 'simplestore' in getrepofeatures()
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
981
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
982
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
983 @check('repobundlerepo', 'whether we can open bundle files as repos')
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
984 def has_repobundlerepo():
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
985 return 'bundlerepo' in getrepofeatures()
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
986
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
987
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
988 @check('repofncache', 'repository has an fncache')
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
989 def has_repofncache():
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
990 return 'fncache' in getrepofeatures()
39648
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
991
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
992
40326
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
993 @check('sqlite', 'sqlite3 module is available')
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
994 def has_sqlite():
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
995 try:
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
996 import sqlite3
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
997
40453
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
998 version = sqlite3.sqlite_version_info
40326
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
999 except ImportError:
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1000 return False
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1001
40453
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1002 if version < (3, 8, 3):
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1003 # WITH clause not supported
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1004 return False
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1005
41543
dddf53473315 tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41443
diff changeset
1006 return matchoutput('sqlite3 -version', br'^3\.\d+')
40326
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1007
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1008
39648
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1009 @check('vcr', 'vcr http mocking library')
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1010 def has_vcr():
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1011 try:
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1012 import vcr
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1013
39648
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1014 vcr.VCR
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1015 return True
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1016 except (ImportError, AttributeError):
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1017 pass
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1018 return False
41787
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1019
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1020
41787
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1021 @check('emacs', 'GNU Emacs')
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1022 def has_emacs():
41842
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1023 # Our emacs lisp uses `with-eval-after-load` which is new in emacs
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1024 # 24.4, so we allow emacs 24.4, 24.5, and 25+ (24.5 was the last
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1025 # 24 release)
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1026 return matchoutput('emacs --version', b'GNU Emacs 2(4.4|4.5|5|6|7|8|9)')
43095
fb41ea2ea076 formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
1027
fb41ea2ea076 formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
1028
43347
abb95b6f79d3 formatting: using black to check for formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43194
diff changeset
1029 @check('black', 'the black formatter for python')
43095
fb41ea2ea076 formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
1030 def has_black():
43347
abb95b6f79d3 formatting: using black to check for formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43194
diff changeset
1031 blackcmd = 'black --version'
43352
14e3be17e5f5 hghave: verify we have a black that is new enough for our format
Augie Fackler <augie@google.com>
parents: 43347
diff changeset
1032 version_regex = b'black, version ([0-9a-b.]+)'
14e3be17e5f5 hghave: verify we have a black that is new enough for our format
Augie Fackler <augie@google.com>
parents: 43347
diff changeset
1033 version = matchoutput(blackcmd, version_regex)
14e3be17e5f5 hghave: verify we have a black that is new enough for our format
Augie Fackler <augie@google.com>
parents: 43347
diff changeset
1034 sv = distutils.version.StrictVersion
43406
c3bca833cb92 hghave: fix bytes/string issue on Python 3
Augie Fackler <augie@google.com>
parents: 43352
diff changeset
1035 return version and sv(_strpath(version.group(1))) >= sv('19.10b0')
43470
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1036
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1037
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1038 @check('pytype', 'the pytype type checker')
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1039 def has_pytype():
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1040 pytypecmd = 'pytype --version'
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1041 version = matchoutput(pytypecmd, b'[0-9a-b.]+')
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1042 sv = distutils.version.StrictVersion
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1043 return version and sv(_strpath(version.group(0))) >= sv('2019.10.17')
43819
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1044
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1045
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1046 @check("rustfmt", "rustfmt tool")
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1047 def has_rustfmt():
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1048 # We use Nightly's rustfmt due to current unstable config options.
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1049 return matchoutput(
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1050 '`rustup which --toolchain nightly rustfmt` --version', b'rustfmt'
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1051 )