annotate tests/hghave.py @ 48042:008959fcbfb2

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