annotate tests/hghave.py @ 47072:4c041c71ec01

revlog: introduce an explicit tracking of what the revlog is about Since the dawn of time, people have been forced to rely to lossy introspection of the index filename to determine what the purpose and role of the revlog they encounter is. This is hacky, error prone, inflexible, abstraction-leaky, <insert-your-own-complaints-here>. In f63299ee7e4d Raphaël introduced a new attribute to track this information: `revlog_kind`. However it is initialized in an odd place and various instances end up not having it set. In addition is only tracking some of the information we end up having to introspect in various pieces of code. So we add a new attribute that holds more data and is more strictly enforced. This work is done in collaboration with Raphaël. The `revlog_kind` one will be removed/adapted in the next changeset. We expect to be able to clean up various existing piece of code and to simplify coming work around the newer revlog format. Differential Revision: https://phab.mercurial-scm.org/D10352
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 06 Apr 2021 05:20:24 +0200
parents 41d43d12c2c4
children 94c0c36299b1
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"),
46163
ebcc52046096 hghave: add some official category for known-bad and missing-good output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46097
diff changeset
17 "known-bad-output": (lambda: True, "use for currently known bad output"),
ebcc52046096 hghave: add some official category for known-bad and missing-good output
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46097
diff changeset
18 "missing-correct-output": (lambda: False, "use for missing good output"),
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
19 }
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
20
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
21 try:
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
22 import msvcrt
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
23
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
24 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
25 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
26 except ImportError:
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
27 pass
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
28
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
29 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
30 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
31
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
32 if sys.version_info[0] >= 3:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
33
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
34 def _sys2bytes(p):
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
35 if p is None:
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
36 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
37 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
38
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
39 def _bytes2sys(p):
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
40 if p is None:
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
41 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
42 return p.decode('utf-8')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
43
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 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
46
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
47 def _sys2bytes(p):
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
48 return p
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
49
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
50 _bytes2sys = _sys2bytes
39759
aeb2812f304d py3: fix a type error in hghave.has_hardlink
Matt Harbison <matt_harbison@yahoo.com>
parents: 39648
diff changeset
51
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
52
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
53 def check(name, desc):
28757
93bf61913f33 hghave: add docstring for check
timeless <timeless@mozdev.org>
parents: 28756
diff changeset
54 """Registers a check function for a feature."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
55
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
56 def decorator(func):
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
57 checks[name] = (func, desc)
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
58 return func
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
59
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
60 return decorator
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
61
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
62
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
63 def checkvers(name, desc, vers):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
64 """Registers a check function for each of a series of versions.
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
65
43113
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
66 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
67
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
68 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
69 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
70 'py38', not 'py3.8' or 'py-38')."""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
71
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
72 def decorator(func):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
73 def funcv(v):
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
74 def f():
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
75 return func(v)
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 return f
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
78
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
79 for v in vers:
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
80 v = str(v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
81 f = funcv(v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
82 checks['%s%s' % (name, v.replace('.', ''))] = (f, desc % v)
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
83 return func
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
84
28758
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
85 return decorator
44e076a12bd3 hghave: add checkvers function
timeless <timeless@mozdev.org>
parents: 28757
diff changeset
86
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
87
26067
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
88 def checkfeatures(features):
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
89 result = {
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
90 'error': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
91 'missing': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
92 'skipped': [],
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
93 }
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
94
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
95 for feature in features:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
96 negate = feature.startswith('no-')
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
97 if negate:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
98 feature = feature[3:]
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
99
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
100 if feature not in checks:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
101 result['missing'].append(feature)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
102 continue
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
103
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
104 check, desc = checks[feature]
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
105 try:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
106 available = check()
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
107 except Exception:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
108 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
109 continue
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
110
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
111 if not negate and not available:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
112 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
113 elif negate and available:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
114 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
115
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
116 return result
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
117
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
118
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
119 def require(features):
26067
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
120 """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
121 result = checkfeatures(features)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
122
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
123 for missing in result['missing']:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
124 stderr.write(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
125 ('skipped: unknown feature: %s\n' % missing).encode('utf-8')
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
126 )
26068
05e7f57c74ac hghave: remove quiet option
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26067
diff changeset
127 for msg in result['skipped']:
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
128 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
129 for msg in result['error']:
41003
87c98ffbc8c7 py3: use bytes stdout in hghave.py
Matt Harbison <matt_harbison@yahoo.com>
parents: 40453
diff changeset
130 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
131
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
132 if result['missing']:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
133 sys.exit(2)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
134
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
135 if result['skipped'] or result['error']:
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
136 sys.exit(1)
8107c308ff22 hghave: move feature checking into hghave.py
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25859
diff changeset
137
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
138
5302
961876838de0 hghave: detect cvs and cvsps availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
139 def matchoutput(cmd, regexp, ignorestatus=False):
27114
a636a46f5094 hghave.py: fix matchoutput documentation
timeless <timeless@mozdev.org>
parents: 26842
diff changeset
140 """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
141 is matched by the supplied regular expression.
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
142 """
46870
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
143
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
144 # Tests on Windows have to fake USERPROFILE to point to the test area so
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
145 # that `~` is properly expanded on py3.8+. However, some tools like black
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
146 # make calls that need the real USERPROFILE in order to run `foo --version`.
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
147 env = os.environ
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
148 if os.name == 'nt':
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
149 env = os.environ.copy()
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
150 env['USERPROFILE'] = env['REALUSERPROFILE']
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
151
5252
c0281c6b40b0 hghave: wrap command output matching
Patrick Mezard <pmezard@gmail.com>
parents: 5218
diff changeset
152 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
153 p = subprocess.Popen(
46870
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
154 cmd,
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
155 shell=True,
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
156 stdout=subprocess.PIPE,
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
157 stderr=subprocess.STDOUT,
41d43d12c2c4 tests: restore the ability to run `black` on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46724
diff changeset
158 env=env,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
159 )
38179
6fb76897e066 hghave: avoid a deadlock reading the child process's output
Matt Harbison <matt_harbison@yahoo.com>
parents: 37415
diff changeset
160 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
161 ret = p.returncode
26137
99e8a9ff1f5f hghave: use subprocess instead of os.popen
Augie Fackler <augie@google.com>
parents: 26111
diff changeset
162 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
163
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
164
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
165 @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
166 def has_baz():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
167 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
168
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
169
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
170 @check("bzr", "Canonical's Bazaar client")
7053
209ef5f3534c convert: add bzr source
Marek Kubica <marek@xivilization.net>
parents: 6998
diff changeset
171 def has_bzr():
7061
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
172 try:
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
173 import bzrlib
29866
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
174 import bzrlib.bzrdir
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
175 import bzrlib.errors
a5ce381a8da0 hghave: make bzr checks stricter
timeless <timeless@mozdev.org>
parents: 29843
diff changeset
176 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
177 import bzrlib.revisionspec
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
178
29903
fe81c953f369 hghave: fix has_bzr() to not try to import RevisionSpec as module
Yuya Nishihara <yuya@tcha.org>
parents: 29873
diff changeset
179 bzrlib.revisionspec.RevisionSpec
16684
e617876fe82d cleanup: "x != None" -> "x is not None"
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
180 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
181 except (AttributeError, ImportError):
7061
8b874f8cd29f tests: check for bzr support by importing bzrlib
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7053
diff changeset
182 return False
7053
209ef5f3534c convert: add bzr source
Marek Kubica <marek@xivilization.net>
parents: 6998
diff changeset
183
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
184
28760
cef86c3c82d2 hghave: use checkvers for bzr114
timeless <timeless@mozdev.org>
parents: 28759
diff changeset
185 @checkvers("bzr", "Canonical's Bazaar client >= %s", (1.14,))
cef86c3c82d2 hghave: use checkvers for bzr114
timeless <timeless@mozdev.org>
parents: 28759
diff changeset
186 def has_bzr_range(v):
42215
07e479ef7c96 hghave: deal with "rc" release
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 41842
diff changeset
187 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
188 try:
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
189 import bzrlib
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
190
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
191 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
192 int(major),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
193 int(minor),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
194 )
8126
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
195 except ImportError:
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
196 return False
13b36eb14324 convert/bzr: handle files replaced by directories (issue1623)
Patrick Mezard <pmezard@gmail.com>
parents: 7823
diff changeset
197
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
198
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
199 @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
200 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
201 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
202
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
203
46724
78e6700ab009 tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents: 46604
diff changeset
204 @check("rhg", "running with rhg as 'hg'")
78e6700ab009 tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents: 46604
diff changeset
205 def has_rhg():
78e6700ab009 tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents: 46604
diff changeset
206 return 'RHG_INSTALLED_AS_HG' in os.environ
78e6700ab009 tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents: 46604
diff changeset
207
78e6700ab009 tests: Add `rhg` and `no-rhg` for #require and #if in .t files
Simon Sapin <simon.sapin@octobus.net>
parents: 46604
diff changeset
208
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
209 @check("cvs", "cvs client/server")
5302
961876838de0 hghave: detect cvs and cvsps availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
210 def has_cvs():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
211 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
212 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
213
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
214
28756
45954a251a40 hghave: update cvs112 description
timeless <timeless@mozdev.org>
parents: 28591
diff changeset
215 @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
216 def has_cvs112():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
217 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
218 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
219
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
220
28796
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
221 @check("cvsnt", "cvsnt client/server")
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
222 def has_cvsnt():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
223 re = br'Concurrent Versions System \(CVSNT\) (\d+).(\d+).*\(client/server\)'
28796
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
224 return matchoutput('cvsnt --version 2>&1', re)
08a686a4a0a2 hghave: add cvsnt
timeless <timeless@mozdev.org>
parents: 28779
diff changeset
225
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
226
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
227 @check("darcs", "darcs client")
5410
2daecf3d2582 hghave: detect darcs client
Patrick Mezard <pmezard@gmail.com>
parents: 5409
diff changeset
228 def has_darcs():
30297
d4db88a26ad5 hghave: check darcs version more strictly
Yuya Nishihara <yuya@tcha.org>
parents: 30242
diff changeset
229 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
230
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
231
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
232 @check("mtn", "monotone client (>= 1.0)")
6372
8f79820443a4 Add a test for monotone conversion
Patrick Mezard <pmezard@gmail.com>
parents: 6355
diff changeset
233 def has_mtn():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
234 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
235 'mtn --version', br'monotone 0\.', True
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
236 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
237
6372
8f79820443a4 Add a test for monotone conversion
Patrick Mezard <pmezard@gmail.com>
parents: 6355
diff changeset
238
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
239 @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
240 def has_eol_in_paths():
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
241 try:
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
242 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
243 os.close(fd)
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
244 os.remove(path)
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
245 return True
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16685
diff changeset
246 except (IOError, OSError):
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
247 return False
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
248
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
249
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
250 @check("execbit", "executable bit")
5072
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
251 def has_executablebit():
7e2385a31933 hghave: detect executable permission availability.
Patrick Mezard <pmezard@gmail.com>
parents: 5070
diff changeset
252 try:
16320
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
253 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
254 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
255 try:
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
256 os.close(fh)
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25413
diff changeset
257 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
258 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
259 os.chmod(fn, m ^ EXECFLAGS)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
260 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
261 finally:
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
262 os.unlink(fn)
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
263 except (IOError, OSError):
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
264 # 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
265 return False
e11ab387e89c tests: make hghave handle exec bit on Linux with vfat
Matt Mackall <mpm@selenic.com>
parents: 16319
diff changeset
266 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
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("icasefs", "case insensitive file system")
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
270 def has_icasefs():
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
271 # Stolen from mercurial.util
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
272 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
273 os.close(fd)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
274 try:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
275 s1 = os.stat(path)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
276 d, b = os.path.split(path)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
277 p2 = os.path.join(d, b.upper())
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
278 if path == p2:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
279 p2 = os.path.join(d, b.lower())
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
280 try:
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
281 s2 = os.stat(p2)
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
282 return s2 == s1
16688
cfb6682961b8 cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents: 16685
diff changeset
283 except OSError:
6806
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
284 return False
2134d6c09432 Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents: 6626
diff changeset
285 finally:
6998
ddfcefab8b97 merge with -stable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6806 6996
diff changeset
286 os.remove(path)
ddfcefab8b97 merge with -stable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6806 6996
diff changeset
287
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
288
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
289 @check("fifo", "named pipes")
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
290 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
291 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
292 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
293 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
294 try:
6d1673107143 tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents: 16968
diff changeset
295 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
296 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
297 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
298 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
299 return False
5074
e86788af599a hghave: detect support for EOL in paths.
Patrick Mezard <pmezard@gmail.com>
parents: 5072
diff changeset
300
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
301
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
302 @check("killdaemons", 'killdaemons.py support')
17467
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
303 def has_killdaemons():
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
304 return True
448d0c452140 test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents: 17016
diff changeset
305
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
306
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
307 @check("cacheable", "cacheable filesystem")
14927
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
308 def has_cacheable_fs():
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
309 from mercurial import util
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
310
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
311 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix)
14927
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
312 os.close(fd)
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
313 try:
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
314 return util.cachestat(path).cacheable()
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
315 finally:
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
316 os.remove(path)
2aa3e07b2f07 posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents: 14550
diff changeset
317
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
318
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
319 @check("lsprof", "python lsprof module")
5099
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
320 def has_lsprof():
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
321 try:
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
322 import _lsprof
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
323
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
324 _lsprof.Profiler # silence unused import warning
5099
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
325 return True
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
326 except ImportError:
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
327 return False
105d4cf7ec24 Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents: 5092
diff changeset
328
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
329
44279
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
330 def _gethgversion():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
331 m = matchoutput('hg --version --quiet 2>&1', br'(\d+)\.(\d+)')
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
332 if not m:
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
333 return (0, 0)
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
334 return (int(m.group(1)), int(m.group(2)))
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
335
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
336
44279
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
337 _hgversion = None
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
338
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
339
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
340 def gethgversion():
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
341 global _hgversion
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
342 if _hgversion is None:
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
343 _hgversion = _gethgversion()
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
344 return _hgversion
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
345
e48a996d12bc hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents: 44264
diff changeset
346
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
347 @checkvers(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
348 "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
349 )
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
350 def has_hg_range(v):
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
351 major, minor = v.split('.')[0:2]
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
352 return gethgversion() >= (int(major), int(minor))
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
353
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
354
44465
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
355 @check("rust", "Using the Rust extensions")
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
356 def has_rust():
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
357 """Check is the mercurial currently running is using some rust code"""
44640
51ffb2a6c08a tests: pass str to matchoutput()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 44498
diff changeset
358 cmd = 'hg debuginstall --quiet 2>&1'
44465
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
359 match = br'checking module policy \(([^)]+)\)'
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
360 policy = matchoutput(cmd, match)
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
361 if not policy:
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
362 return False
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
363 return b'rust' in policy.group(1)
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
364
75ada5fe9b62 hghave: add a `rust` keyword to detect the use of compiled rust code
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 44461
diff changeset
365
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
366 @check("hg08", "Mercurial >= 0.8")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
367 def has_hg08():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
368 if checks["hg09"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
369 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
370 return matchoutput('hg help annotate 2>&1', '--date')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
371
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
372
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
373 @check("hg07", "Mercurial >= 0.7")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
374 def has_hg07():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
375 if checks["hg08"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
376 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
377 return matchoutput('hg --version --quiet 2>&1', 'Mercurial Distributed SCM')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
378
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
379
28761
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
380 @check("hg06", "Mercurial >= 0.6")
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
381 def has_hg06():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
382 if checks["hg07"][0]():
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
383 return True
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
384 return matchoutput('hg --version --quiet 2>&1', 'Mercurial version')
be13a0fb84e8 hghave: add hg06..hg39
timeless <timeless@mozdev.org>
parents: 28760
diff changeset
385
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
386
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
387 @check("gettext", "GNU Gettext (msgfmt)")
13442
bb107a31820e test-i18n: make test conditional on msgfmt availability
Martin Geisler <mg@lazybytes.net>
parents: 13418
diff changeset
388 def has_gettext():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
389 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
390
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
391
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
392 @check("git", "git command line client")
5218
4fa0f2dff643 hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents: 5103
diff changeset
393 def has_git():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
394 return matchoutput('git --version 2>&1', br'^git version')
5218
4fa0f2dff643 hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents: 5103
diff changeset
395
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
396
32901
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
397 def getgitversion():
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
398 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
399 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
400 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
401 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
402
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
403
44483
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
404 @check("pygit2", "pygit2 Python library")
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
405 def has_git():
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
406 try:
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
407 import pygit2
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
408
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
409 pygit2.Oid # silence unused import
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
410 return True
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
411 except ImportError:
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
412 return False
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
413
2e464925f662 hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents: 44465
diff changeset
414
35139
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
415 # 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
416 @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
417 def has_lfsserver():
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
418 exe = 'lfs-test-server'
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
419 if has_windows():
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
420 exe = 'lfs-test-server.exe'
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
421 return any(
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
422 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
423 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
424 )
a2e927ded455 hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents: 35043
diff changeset
425
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
426
32901
559db66dead5 hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents: 32856
diff changeset
427 @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
428 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
429 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
430 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
431
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
432
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
433 @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
434 def has_docutils():
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
435 try:
28779
0970ebec29b4 hghave: replace relative import of docutils.core
Yuya Nishihara <yuya@tcha.org>
parents: 28761
diff changeset
436 import docutils.core
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
437
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
438 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
439 return True
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
440 except ImportError:
cbe400a8e217 doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents: 9819
diff changeset
441 return False
9446
57d682d7d2da test-gendoc: test documentation generation
Martin Geisler <mg@lazybytes.net>
parents: 9395
diff changeset
442
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
443
14050
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
444 def getsvnversion():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
445 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
446 if not m:
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
447 return (0, 0)
9e8a9d45945c subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents: 13543
diff changeset
448 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
449
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
450
28759
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
451 @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
452 def has_svn_range(v):
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
453 major, minor = v.split('.')[0:2]
2348ca49aaee hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents: 28758
diff changeset
454 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
455
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
456
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
457 @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
458 def has_svn():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
459 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
460 'svnadmin --version 2>&1', br'^svnadmin, version'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
461 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
462
5253
d82ebcdf20e1 hghave: detect subversion client and admin tools availability
Patrick Mezard <pmezard@gmail.com>
parents: 5252
diff changeset
463
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
464 @check("svn-bindings", "subversion python bindings")
5254
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
465 def has_svn_bindings():
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
466 try:
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
467 import svn.core
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
468
7315
408cf9eb9e5d tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7061
diff changeset
469 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
470 if version < (1, 4):
408cf9eb9e5d tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 7061
diff changeset
471 return False
5254
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
472 return True
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
473 except ImportError:
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
474 return False
d61e98a82cee hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents: 5253
diff changeset
475
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
476
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
477 @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
478 def has_p4():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
479 return matchoutput('p4 -V', br'Rev\. P4/') and matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
480 'p4d -V', br'Rev\. P4D/'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
481 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
482
7823
11efa41037e2 convert: Perforce source for conversion to Mercurial
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents: 7773
diff changeset
483
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
484 @check("symlink", "symbolic links")
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
485 def has_symlink():
43455
6792da448437 hghave: disallow symlinks on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 43412
diff changeset
486 # 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
487 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
488 return False
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
489 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
490 try:
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
491 os.symlink(".", name)
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
492 os.unlink(name)
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
493 return True
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
494 except (OSError, AttributeError):
ac0da5caebec tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents: 15568
diff changeset
495 return False
5409
190c234c8fa0 hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents: 5308
diff changeset
496
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
497
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
498 @check("hardlink", "hardlinks")
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
499 def has_hardlink():
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
500 from mercurial import util
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
501
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
502 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
503 os.close(fh)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
504 name = tempfile.mktemp(dir='.', prefix=tempprefix)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
505 try:
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
506 util.oslink(_sys2bytes(fn), _sys2bytes(name))
25090
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
507 os.unlink(name)
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
508 return True
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
509 except OSError:
252412e24551 hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents: 24290
diff changeset
510 return False
16971
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
511 finally:
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
512 os.unlink(fn)
8aeb2f1ae94c tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents: 16970
diff changeset
513
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
514
31576
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
515 @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
516 def has_hardlink_whitelisted():
31674
b33e352c365c hghave: use util.getfstype
Yuya Nishihara <yuya@tcha.org>
parents: 31576
diff changeset
517 from mercurial import util
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
518
31678
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
519 try:
36942
bf73012877a4 hghave: fix hardlink-whitelisted check on Python 3
Augie Fackler <augie@google.com>
parents: 36941
diff changeset
520 fstype = util.getfstype(b'.')
31678
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
521 except OSError:
1ed57a7dd904 statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents: 31674
diff changeset
522 return False
31576
07f0cddb0594 hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents: 31413
diff changeset
523 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
524
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
525
30230
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
526 @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
527 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
528 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
529 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
530 try:
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
531 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
532 # 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
533 # 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
534 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
535 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
536 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
537 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
538 finally:
46a0203dfb89 tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents: 29903
diff changeset
539 os.chdir(ocwd)
30242
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
540 # 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
541 try:
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
542 os.rmdir(temp)
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
543 except OSError:
389cbfe63586 hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents: 30230
diff changeset
544 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
545
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
546
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
547 @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
548 def has_tla():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
549 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
550
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
551
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
552 @check("gpg", "gpg client")
8809
6fce36336e42 gpg: add test
Brendan Cully <brendan@kublai.com>
parents: 8213
diff changeset
553 def has_gpg():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
554 return matchoutput('gpg --version 2>&1', br'GnuPG')
8809
6fce36336e42 gpg: add test
Brendan Cully <brendan@kublai.com>
parents: 8213
diff changeset
555
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
556
29790
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
557 @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
558 def has_gpg2():
94fb0458a791 test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents: 29611
diff changeset
559 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
560
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
561
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
562 @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
563 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
564 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
565
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
566
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
567 @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
568 def has_unix_permissions():
16968
456f457e376d tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents: 16966
diff changeset
569 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
570 try:
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
571 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
572 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
573 os.umask(umask)
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
574 f = open(fname, 'w')
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
575 f.close()
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
576 mode = os.stat(fname).st_mode
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
577 os.unlink(fname)
25658
e93036747902 global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25413
diff changeset
578 if mode & 0o777 != ~umask & 0o666:
6063
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
579 return False
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
580 return True
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
581 finally:
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
582 os.rmdir(d)
b74a0c4bfb30 hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5685
diff changeset
583
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
584
22994
840be5ca03e1 cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents: 22579
diff changeset
585 @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
586 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
587 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
588
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
589
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
590 @check("root", "root permissions")
20008
e54a078153f7 tests: skip tests that require not having root (issue4089)
Matt Mackall <mpm@selenic.com>
parents: 19931
diff changeset
591 def has_root():
20114
390aff33c2f9 tests: fix `hghave root` on windows
Simon Heimberg <simohe@besonet.ch>
parents: 20008
diff changeset
592 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
593
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
594
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
595 @check("pyflakes", "Pyflakes python linter")
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents: 14050
diff changeset
596 def has_pyflakes():
44498
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
597 try:
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
598 import pyflakes
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
599
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
600 pyflakes.__version__
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
601 except ImportError:
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
602 return False
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
603 else:
aa0e1341457b tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents: 44483
diff changeset
604 return True
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
605
14140
82f0412ef7de tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents: 14050
diff changeset
606
31413
aa797bd54f44 test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30559
diff changeset
607 @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
608 def has_pylint():
45943
a9797b49fb69 hghave: adjust the detection of `pylint` for modern versions
Matt Harbison <matt_harbison@yahoo.com>
parents: 45942
diff changeset
609 return matchoutput("pylint --help", br"Usage:[ ]+pylint", True)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
610
31413
aa797bd54f44 test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30559
diff changeset
611
46405
9fd4f7af42ea clang-format: show required version in skip message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46403
diff changeset
612 @check("clang-format", "clang-format C code formatter (>= 11)")
34696
15b561fffde5 hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents: 34401
diff changeset
613 def has_clang_format():
45184
3781e9f74b27 hghave: fix possible int('') in has_clang_format()
Yuya Nishihara <yuya@tcha.org>
parents: 45172
diff changeset
614 m = matchoutput('clang-format --version', br'clang-format version (\d+)')
46177
0c320e6032f1 chg: format code by clang-format version 11.0.1-+rc1-1
Yuya Nishihara <yuya@tcha.org>
parents: 46163
diff changeset
615 # style changed somewhere between 10.x and 11.x
0c320e6032f1 chg: format code by clang-format version 11.0.1-+rc1-1
Yuya Nishihara <yuya@tcha.org>
parents: 46163
diff changeset
616 return m and int(m.group(1)) >= 11
34696
15b561fffde5 hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents: 34401
diff changeset
617
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
618
35043
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
619 @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
620 def has_jshint():
5d4369079c86 tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents: 34892
diff changeset
621 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
622
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
623
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
624 @check("pygments", "Pygments source highlighting library")
6355
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
625 def has_pygments():
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
626 try:
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
627 import pygments
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
628
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
629 pygments.highlight # silence unused import warning
6355
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
630 return True
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
631 except ImportError:
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
632 return False
3b841c189ab7 tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6079
diff changeset
633
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
634
44119
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
635 @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
636 def pygments25():
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
637 try:
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
638 import pygments
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
639
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
640 v = pygments.__version__
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
641 except ImportError:
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
642 return False
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
643
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
644 parts = v.split(".")
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
645 major = int(parts[0])
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
646 minor = int(parts[1])
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
647
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
648 return (major, minor) >= (2, 5)
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
649
5b38c2ab6ad3 tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43819
diff changeset
650
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
651 @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
652 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
653 # 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
654 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
655
7429
dbc40381620e tests: Skip tests if they will fail because of outer repo
Mads Kiilerich <mads@kiilerich.com>
parents: 7315
diff changeset
656
28591
f29cab5c519c hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28582
diff changeset
657 @check("ssl", "ssl module available")
12740
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
658 def has_ssl():
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
659 try:
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
660 import ssl
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
661
28591
f29cab5c519c hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28582
diff changeset
662 ssl.CERT_NONE
12740
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
663 return True
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
664 except ImportError:
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
665 return False
b86c6954ec4c serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents: 10971
diff changeset
666
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
667
29481
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
668 @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
669 def has_defaultcacertsloaded():
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
670 import ssl
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
671 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
672
30559
d83ca854fa21 ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30441
diff changeset
673 ui = uimod.ui.load()
29483
918dce4b8c26 sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29481
diff changeset
674 cafile = sslutil._defaultcacerts(ui)
29481
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
675 ctx = ssl.create_default_context()
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
676 if cafile:
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
677 ctx.load_verify_locations(cafile=cafile)
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
678 else:
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
679 ctx.load_default_certs()
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
680
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
681 return len(ctx.get_ca_certs()) > 0
5caa415aa48b tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29140
diff changeset
682
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
683
29601
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
684 @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
685 def has_tls1_2():
6cff2ac0ccb9 sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29576
diff changeset
686 from mercurial import sslutil
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
687
41381
423a6b2ddafa tests: add b'' when testing for tls1.2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41366
diff changeset
688 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
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("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
692 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
693 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
694
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
695
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
696 @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
697 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
698 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
699
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
700
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
701 @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
702 def has_serve():
32856
41f99a90675d hghave: enable 'serve' on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 32770
diff changeset
703 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
704
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
705
44990
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
706 @check("setprocname", "whether osutil.setprocname is available or not")
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
707 def has_setprocname():
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
708 try:
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
709 from mercurial.utils import procutil
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
710
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
711 procutil.setprocname
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
712 return True
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
713 except AttributeError:
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
714 return False
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
715
62bdb288c449 tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44881
diff changeset
716
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
717 @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
718 def has_test_repo():
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
719 t = os.environ["TESTDIR"]
0e1cbd3d52f7 tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents: 20644
diff changeset
720 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
721
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
722
46604
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
723 @check("network-io", "whether tests are allowed to access 3rd party services")
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
724 def has_test_repo():
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
725 t = os.environ.get("HGTESTS_ALLOW_NETIO")
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
726 return t == "1"
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
727
ad107ed7a4aa ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents: 46405
diff changeset
728
46325
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
729 @check("curses", "terminfo compiler and curses module")
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
730 def has_curses():
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
731 try:
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
732 import curses
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
733
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
734 curses.COLOR_BLUE
46320
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
735
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
736 # Windows doesn't have a `tic` executable, but the windows_curses
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
737 # package is sufficient to run the tests without it.
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
738 if os.name == 'nt':
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
739 return True
ef771d329961 hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 46264
diff changeset
740
46325
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
741 return has_tic()
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
742
44264
d3f776c4760e py3: catch AttributeError too with ImportError
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44119
diff changeset
743 except (ImportError, AttributeError):
20304
e457321a5687 tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents: 20114
diff changeset
744 return False
15539
d09ea5bbc9a4 tests: skip color test on platforms without tic
Mads Kiilerich <mads@kiilerich.com>
parents: 15446
diff changeset
745
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
746
46325
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
747 @check("tic", "terminfo compiler")
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
748 def has_tic():
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
749 return matchoutput('test -x "`which tic`"', br'')
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
750
e5e6282fa66a hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents: 46320
diff changeset
751
43699
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
752 @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
753 def has_xz():
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
754 # 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
755 # 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
756 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
757
21e05aabef8c hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents: 43470
diff changeset
758
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
759 @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
760 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
761 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
762
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
763
22093
45611a306f77 tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents: 21208
diff changeset
764 @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
765 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
766 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
767
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
768
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
769 @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
770 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
771 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
772
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
773
29026
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
774 @check("osxpackaging", "OS X packaging tools")
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
775 def has_osxpackaging():
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
776 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
777 return (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
778 matchoutput('pkgbuild', br'Usage: pkgbuild ', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
779 and matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
780 'productbuild', br'Usage: productbuild ', ignorestatus=1
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
781 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
782 and matchoutput('lsbom', br'Usage: lsbom', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
783 and matchoutput('xar --help', br'Usage: xar', ignorestatus=1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
784 )
29026
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
785 except ImportError:
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
786 return False
80f15aa32edd hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents: 29022
diff changeset
787
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
788
34885
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
789 @check('linuxormacos', 'Linux or MacOS')
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
790 def has_linuxormacos():
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
791 # 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
792 return sys.platform.startswith(('linux', 'darwin'))
df2ff314e36f fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents: 34840
diff changeset
793
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
794
26111
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
795 @check("docker", "docker support")
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
796 def has_docker():
29140
47eab0cb72e3 hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents: 29107
diff changeset
797 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
798 if matchoutput('docker --help', pat):
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
799 if 'linux' not in sys.platform:
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
800 # 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
801 # 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
802 # 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
803 # $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
804 # 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
805 # 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
806 # return 'DOCKER_HOST' in os.environ
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
807 return False
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
808
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
809 return True
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
810 return False
dcc12365fa38 hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents: 26110
diff changeset
811
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
812
26110
2dcfb98c5314 hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents: 26109
diff changeset
813 @check("debhelper", "debian packaging tools")
2dcfb98c5314 hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents: 26109
diff changeset
814 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
815 # 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
816 # quote), so just accept anything in that spot.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
817 dpkg = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
818 'dpkg --version', br"Debian .dpkg' package management program"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
819 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
820 dh = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
821 '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
822 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
823 dh_py2 = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
824 'dh_python2 --help', br'other supported Python versions'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
825 )
34399
200eadbcf0b0 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents: 34394
diff changeset
826 # 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
827 # 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
828 debuild = matchoutput(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
829 'debuild --help', br'to run debian/rules with given parameter'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
830 )
34399
200eadbcf0b0 hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents: 34394
diff changeset
831 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
832
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
833
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
834 @check(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
835 "debdeps", "debian build dependencies (run dpkg-checkbuilddeps in contrib/)"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
836 )
34401
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
837 def has_debdeps():
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
838 # 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
839 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
840 return matchoutput('dpkg-checkbuilddeps %s' % path, br'')
13d3f8aaed87 tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents: 34399
diff changeset
841
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
842
29867
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
843 @check("demandimport", "demandimport enabled")
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
844 def has_demandimport():
34840
88624b40a9cb hghave: disable demandimport when chg is running
Saurabh Singh <singhsrb@fb.com>
parents: 34696
diff changeset
845 # chg disables demandimport intentionally for performance wins.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
846 return (not has_chg()) and os.environ.get('HGDEMANDIMPORT') != 'disable'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
847
29867
b05a3a04f046 hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents: 29866
diff changeset
848
43113
37af48031d6f hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents: 43095
diff changeset
849 # 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
850 # punctuation here.
41443
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
851 @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
852 def has_python_range(v):
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
853 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
854 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
855
1a6a01a21d6a hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41381
diff changeset
856 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
857
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
858
40263
8cf459d8b111 py3: use py3 as the test tag, dropping the k
Martijn Pieters <mj@octobus.net>
parents: 39759
diff changeset
859 @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
860 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
861 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
862
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
863
28582
cdbc25306696 run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28383
diff changeset
864 @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
865 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
866 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
867
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
868
25859
1619563959b3 tests: disable test of buffer overflow in parsers.c if --pure
Yuya Nishihara <yuya@tcha.org>
parents: 25658
diff changeset
869 @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
870 def has_pure():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
871 return any(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
872 [
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
873 os.environ.get("HGMODULEPOLICY") == "py",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
874 os.environ.get("HGTEST_RUN_TESTS_PURE") == "--pure",
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
875 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
876 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
877
26109
bad09bd22b6a run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents: 26068
diff changeset
878
32474
c2b7fb580794 tests: hint how to run slow tests when rejecting
Kyle Lippincott <spectral@google.com>
parents: 32245
diff changeset
879 @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
880 def has_slow():
bad09bd22b6a run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents: 26068
diff changeset
881 return os.environ.get('HGTEST_SLOW') == 'slow'
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
882
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
883
28383
e13e0e189990 hghave: improve description of Hypothesis
timeless <timeless@mozdev.org>
parents: 28126
diff changeset
884 @check("hypothesis", "Hypothesis automated test generation")
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
885 def has_hypothesis():
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
886 try:
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
887 import hypothesis
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
888
26842
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
889 hypothesis.given
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
890 return True
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
891 except ImportError:
0f76c64f5cc3 testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents: 26145
diff changeset
892 return False
29843
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
893
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
894
29843
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
895 @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
896 def unzip_understands_symlinks():
00ca4f966ca6 hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents: 29809
diff changeset
897 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
898
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
899
30441
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
900 @check("zstd", "zstd Python module available")
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
901 def has_zstd():
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
902 try:
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
903 import mercurial.zstd
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
904
30441
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
905 mercurial.zstd.__version__
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
906 return True
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
907 except ImportError:
de48d3a0573a hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30297
diff changeset
908 return False
31964
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
909
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
910
31964
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
911 @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
912 def has_dev_full():
ebaada96aec3 stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents: 31678
diff changeset
913 return os.path.exists('/dev/full')
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
914
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
915
43412
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
916 @check("ensurepip", "ensurepip module")
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
917 def has_ensurepip():
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
918 try:
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
919 import ensurepip
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
920
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
921 ensurepip.bootstrap
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
922 return True
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
923 except ImportError:
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
924 return False
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
925
ca0cd0a13514 tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43406
diff changeset
926
46097
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
927 @check("virtualenv", "virtualenv support")
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
928 def has_virtualenv():
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
929 try:
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
930 import virtualenv
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
931
46097
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
932 # --no-site-package became the default in 1.7 (Nov 2011), and the
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
933 # argument was removed in 20.0 (Feb 2020). Rather than make the
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
934 # script complicated, just ignore ancient versions.
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
935 return int(virtualenv.__version__.split('.')[0]) > 1
1b5e0d0bdb05 hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents: 45987
diff changeset
936 except (AttributeError, ImportError, IndexError):
32726
a6e4c4218b71 hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents: 32474
diff changeset
937 return False
32770
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
938
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
939
32770
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
940 @check("fsmonitor", "running tests with fsmonitor")
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
941 def has_fsmonitor():
9cf74abd1252 hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents: 32726
diff changeset
942 return 'HGFSMONITOR_TESTS' in os.environ
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
943
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
944
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
945 @check("fuzzywuzzy", "Fuzzy string matching library")
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
946 def has_fuzzywuzzy():
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
947 try:
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
948 import fuzzywuzzy
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
949
33697
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
950 fuzzywuzzy.__version__
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
951 return True
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
952 except ImportError:
4d1e79945c2e releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents: 33528
diff changeset
953 return False
35668
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
954
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
955
35668
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
956 @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
957 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
958 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
959 if mat:
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
960 # libfuzzer is new in clang 6
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
961 return int(mat.group(1)) > 5
67cead0eb671 hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents: 35139
diff changeset
962 return False
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
963
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
964
38236
a6347ae6168d test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents: 38009
diff changeset
965 @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
966 def has_clang60():
41543
dddf53473315 tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41443
diff changeset
967 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
968
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
969
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
970 @check("xdiff", "xdiff algorithm")
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
971 def has_xdiff():
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
972 try:
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
973 from mercurial import policy
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
974
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
975 bdiff = policy.importmod('bdiff')
36941
3f7bbce8fbaa hghave: fix xdiff check on Python 3
Augie Fackler <augie@google.com>
parents: 36694
diff changeset
976 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
977 except (ImportError, AttributeError):
36678
7834927f0243 tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents: 36659
diff changeset
978 return False
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
979
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
980
37342
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
981 @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
982 def has_extraextensions():
4e6a6d0dccee tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37338
diff changeset
983 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
984
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
985
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
986 def getrepofeatures():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
987 """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
988
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
989 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
990 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
991 mean to remove.
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
992 """
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
993 # 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
994 features = {
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
995 'bundlerepo',
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
996 'revlogstore',
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
997 'fncache',
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
998 }
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
999
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1000 # 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
1001 implies = {
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
1002 '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
1003 }
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1004
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1005 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
1006 if not override:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1007 continue
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1008
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1009 if override.startswith('-'):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1010 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
1011 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
1012 else:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1013 features.add(override)
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1014
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1015 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
1016 if imply.startswith('-'):
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1017 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
1018 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
1019 else:
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1020 features.add(imply)
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1021
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1022 return features
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1023
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1024
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1025 @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
1026 def has_reporevlogstore():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1027 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
1028
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1029
37338
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1030 @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
1031 def has_reposimplestore():
cbc4425e81b5 tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36942
diff changeset
1032 return 'simplestore' in getrepofeatures()
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
1033
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1034
37346
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
1035 @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
1036 def has_repobundlerepo():
45a4799174a1 tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37342
diff changeset
1037 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
1038
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1039
37415
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
1040 @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
1041 def has_repofncache():
c2c8962a9465 simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37346
diff changeset
1042 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
1043
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1044
46264
7149fb17ff72 hghave: clarify `sqlite` requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46177
diff changeset
1045 @check('sqlite', 'sqlite3 module and matching cli is available')
40326
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1046 def has_sqlite():
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1047 try:
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1048 import sqlite3
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1049
40453
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1050 version = sqlite3.sqlite_version_info
40326
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1051 except ImportError:
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1052 return False
fed697fa1734 sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents: 40263
diff changeset
1053
40453
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1054 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
1055 # 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
1056 return False
1bf3e6041e2c tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents: 40326
diff changeset
1057
41543
dddf53473315 tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 41443
diff changeset
1058 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
1059
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1060
46393
66e8e279133b hghave: list the module needed for the `vcr` check
Matt Harbison <matt_harbison@yahoo.com>
parents: 46325
diff changeset
1061 @check('vcr', 'vcr http mocking library (pytest-vcr)')
39648
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1062 def has_vcr():
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1063 try:
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1064 import vcr
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1065
39648
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1066 vcr.VCR
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1067 return True
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1068 except (ImportError, AttributeError):
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1069 pass
e37a0fcd82c0 hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents: 39402
diff changeset
1070 return False
41787
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1071
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42215
diff changeset
1072
41787
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1073 @check('emacs', 'GNU Emacs')
2a6ca0d94b70 hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents: 41759
diff changeset
1074 def has_emacs():
41842
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1075 # 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
1076 # 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
1077 # 24 release)
28842adf8ed5 hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents: 41787
diff changeset
1078 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
1079
fb41ea2ea076 formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43076
diff changeset
1080
46403
959d581bb625 black: show required version in skip message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46393
diff changeset
1081 @check('black', 'the black formatter for python (>= 20.8b1)')
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
1082 def has_black():
43347
abb95b6f79d3 formatting: using black to check for formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 43194
diff changeset
1083 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
1084 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
1085 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
1086 sv = distutils.version.StrictVersion
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45553
diff changeset
1087 return version and sv(_bytes2sys(version.group(1))) >= sv('20.8b1')
43470
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1088
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1089
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1090 @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
1091 def has_pytype():
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1092 pytypecmd = 'pytype --version'
32ac4d0b4102 hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents: 43455
diff changeset
1093 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
1094 sv = distutils.version.StrictVersion
44448
55c443fcb4fc tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents: 44279
diff changeset
1095 return version and sv(_bytes2sys(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
1096
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1097
45987
d42809b6b10f rust-format: pin the formatted to a specific nightly version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45943
diff changeset
1098 @check("rustfmt", "rustfmt tool at version nightly-2020-10-04")
43819
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1099 def has_rustfmt():
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1100 # 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
1101 return matchoutput(
45987
d42809b6b10f rust-format: pin the formatted to a specific nightly version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45943
diff changeset
1102 '`rustup which --toolchain nightly-2020-10-04 rustfmt` --version',
d42809b6b10f rust-format: pin the formatted to a specific nightly version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 45943
diff changeset
1103 b'rustfmt',
43819
e8a3bbffdc7d tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43699
diff changeset
1104 )
45048
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1105
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1106
45553
952f9d37002c rust-tests: add test to check if `Cargo.lock` is up-to-date
Raphaël Gomès <rgomes@octobus.net>
parents: 45216
diff changeset
1107 @check("cargo", "cargo tool")
952f9d37002c rust-tests: add test to check if `Cargo.lock` is up-to-date
Raphaël Gomès <rgomes@octobus.net>
parents: 45216
diff changeset
1108 def has_cargo():
952f9d37002c rust-tests: add test to check if `Cargo.lock` is up-to-date
Raphaël Gomès <rgomes@octobus.net>
parents: 45216
diff changeset
1109 return matchoutput('`rustup which cargo` --version', b'cargo')
952f9d37002c rust-tests: add test to check if `Cargo.lock` is up-to-date
Raphaël Gomès <rgomes@octobus.net>
parents: 45216
diff changeset
1110
952f9d37002c rust-tests: add test to check if `Cargo.lock` is up-to-date
Raphaël Gomès <rgomes@octobus.net>
parents: 45216
diff changeset
1111
45048
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1112 @check("lzma", "python lzma module")
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1113 def has_lzma():
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1114 try:
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1115 import _lzma
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1116
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1117 _lzma.FORMAT_XZ
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1118 return True
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1119 except ImportError:
2c0043977b6d archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents: 44640
diff changeset
1120 return False