Mercurial > hg
annotate tests/hghave.py @ 48670:6d2ddea0721a stable
stream-clone: filter possible missing requirements using all supported one
The `supportedformat` requirements is missing some important requirements and it
seems better to filter out with all requirements we know, not just an
"arbitrary" subset.
The `supportedformat` set is lacking some important requirements (for example
`revlog-compression-zstd`). This is getting fixed on default (for Mercurial 6.1)
However, fixing that in 6.1 means the stream requirements sent over the wire
will contains more items. And if we don't apply this fix on older version, they
might end up complaining about lacking support for feature they actually support
for years.
This patch does not fix the deeper problem (advertised stream requirement
lacking some of them), but focus on the trivial part : Lets use the full set of
supported requirement for looking for unsupported ones.
This patch should be simple to backport to older version of Mercurial and
packager should be encouraged to do so.
This is a graft of d9017df70135 from default.
Differential Revision: https://phab.mercurial-scm.org/D12091
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 24 Jan 2022 11:49:06 +0100 |
parents | f447b90a4b11 |
children | 21c0ae0693bc 090346b095fb |
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 | 219 @check("cvsnt", "cvsnt client/server") |
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 | 222 return matchoutput('cvsnt --version 2>&1', re) |
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 |
48312
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
267 @check("suidbit", "setuid and setgid bit") |
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
268 def has_suidbit(): |
48441
f21e7748c257
hghave: fix the check for suid on platforms lacking support
Matt Harbison <matt_harbison@yahoo.com>
parents:
48319
diff
changeset
|
269 if ( |
f21e7748c257
hghave: fix the check for suid on platforms lacking support
Matt Harbison <matt_harbison@yahoo.com>
parents:
48319
diff
changeset
|
270 getattr(os, "statvfs", None) is None |
f21e7748c257
hghave: fix the check for suid on platforms lacking support
Matt Harbison <matt_harbison@yahoo.com>
parents:
48319
diff
changeset
|
271 or getattr(os, "ST_NOSUID", None) is None |
f21e7748c257
hghave: fix the check for suid on platforms lacking support
Matt Harbison <matt_harbison@yahoo.com>
parents:
48319
diff
changeset
|
272 ): |
48312
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
273 return False |
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
274 return bool(os.statvfs('.').f_flag & os.ST_NOSUID) |
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
275 |
7dd48d5da64f
tests: add guard check for suid support
pacien <pacien.trangirard@pacien.net>
parents:
48289
diff
changeset
|
276 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
277 @check("icasefs", "case insensitive file system") |
6806
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
278 def has_icasefs(): |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
279 # Stolen from mercurial.util |
16968
456f457e376d
tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents:
16966
diff
changeset
|
280 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix) |
6806
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
281 os.close(fd) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
282 try: |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
283 s1 = os.stat(path) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
284 d, b = os.path.split(path) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
285 p2 = os.path.join(d, b.upper()) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
286 if path == p2: |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
287 p2 = os.path.join(d, b.lower()) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
288 try: |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
289 s2 = os.stat(p2) |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
290 return s2 == s1 |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16685
diff
changeset
|
291 except OSError: |
6806
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
292 return False |
2134d6c09432
Add test for case folding issues
Patrick Mezard <pmezard@gmail.com>
parents:
6626
diff
changeset
|
293 finally: |
6998 | 294 os.remove(path) |
295 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
296 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
297 @check("fifo", "named pipes") |
5409
190c234c8fa0
hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents:
5308
diff
changeset
|
298 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
|
299 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
|
300 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
|
301 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
|
302 try: |
6d1673107143
tests/hghave: test that a fifo actually can be created on the filesystem
Mads Kiilerich <mads@kiilerich.com>
parents:
16968
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 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
|
307 return False |
5074
e86788af599a
hghave: detect support for EOL in paths.
Patrick Mezard <pmezard@gmail.com>
parents:
5072
diff
changeset
|
308 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
309 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
310 @check("killdaemons", 'killdaemons.py support') |
17467
448d0c452140
test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
17016
diff
changeset
|
311 def has_killdaemons(): |
448d0c452140
test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
17016
diff
changeset
|
312 return True |
448d0c452140
test-http-branchmap: enable on Windows
Patrick Mezard <patrick@mezard.eu>
parents:
17016
diff
changeset
|
313 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
314 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
315 @check("cacheable", "cacheable filesystem") |
14927
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
316 def has_cacheable_fs(): |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
317 from mercurial import util |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
318 |
16968
456f457e376d
tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents:
16966
diff
changeset
|
319 fd, path = tempfile.mkstemp(dir='.', prefix=tempprefix) |
14927
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
320 os.close(fd) |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
321 try: |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
322 return util.cachestat(path).cacheable() |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
323 finally: |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
324 os.remove(path) |
2aa3e07b2f07
posix, windows: introduce cachestat
Idan Kamara <idankk86@gmail.com>
parents:
14550
diff
changeset
|
325 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
326 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
327 @check("lsprof", "python lsprof module") |
5099
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
328 def has_lsprof(): |
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
329 try: |
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
330 import _lsprof |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
331 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
332 _lsprof.Profiler # silence unused import warning |
5099
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
333 return True |
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
334 except ImportError: |
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
335 return False |
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
5092
diff
changeset
|
336 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
337 |
44279
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
338 def _gethgversion(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
339 m = matchoutput('hg --version --quiet 2>&1', br'(\d+)\.(\d+)') |
28761 | 340 if not m: |
341 return (0, 0) | |
342 return (int(m.group(1)), int(m.group(2))) | |
343 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
344 |
44279
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
345 _hgversion = None |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
346 |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
347 |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
348 def gethgversion(): |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
349 global _hgversion |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
350 if _hgversion is None: |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
351 _hgversion = _gethgversion() |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
352 return _hgversion |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
353 |
e48a996d12bc
hghave: cache the result of gethgversion
Julien Cristau <jcristau@mozilla.com>
parents:
44264
diff
changeset
|
354 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
355 @checkvers( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
356 "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
|
357 ) |
28761 | 358 def has_hg_range(v): |
359 major, minor = v.split('.')[0:2] | |
360 return gethgversion() >= (int(major), int(minor)) | |
361 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
362 |
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
|
363 @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
|
364 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
|
365 """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
|
366 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
|
367 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
|
368 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
|
369 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
|
370 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
|
371 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
|
372 |
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
|
373 |
28761 | 374 @check("hg08", "Mercurial >= 0.8") |
375 def has_hg08(): | |
376 if checks["hg09"][0](): | |
377 return True | |
378 return matchoutput('hg help annotate 2>&1', '--date') | |
379 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
380 |
28761 | 381 @check("hg07", "Mercurial >= 0.7") |
382 def has_hg07(): | |
383 if checks["hg08"][0](): | |
384 return True | |
385 return matchoutput('hg --version --quiet 2>&1', 'Mercurial Distributed SCM') | |
386 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
387 |
28761 | 388 @check("hg06", "Mercurial >= 0.6") |
389 def has_hg06(): | |
390 if checks["hg07"][0](): | |
391 return True | |
392 return matchoutput('hg --version --quiet 2>&1', 'Mercurial version') | |
393 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
394 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
395 @check("gettext", "GNU Gettext (msgfmt)") |
13442
bb107a31820e
test-i18n: make test conditional on msgfmt availability
Martin Geisler <mg@lazybytes.net>
parents:
13418
diff
changeset
|
396 def has_gettext(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
397 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
|
398 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
399 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
400 @check("git", "git command line client") |
5218
4fa0f2dff643
hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents:
5103
diff
changeset
|
401 def has_git(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
402 return matchoutput('git --version 2>&1', br'^git version') |
5218
4fa0f2dff643
hghave: detect git availability
Patrick Mezard <pmezard@gmail.com>
parents:
5103
diff
changeset
|
403 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
404 |
32901
559db66dead5
hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents:
32856
diff
changeset
|
405 def getgitversion(): |
559db66dead5
hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents:
32856
diff
changeset
|
406 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
|
407 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
|
408 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
|
409 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
|
410 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
411 |
44483
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
412 @check("pygit2", "pygit2 Python library") |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
413 def has_git(): |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
414 try: |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
415 import pygit2 |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
416 |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
417 pygit2.Oid # silence unused import |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
418 return True |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
419 except ImportError: |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
420 return False |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
421 |
2e464925f662
hghave: add a check for pygit2
Martin von Zweigbergk <martinvonz@google.com>
parents:
44465
diff
changeset
|
422 |
35139
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
423 # 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
|
424 @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
|
425 def has_lfsserver(): |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
426 exe = 'lfs-test-server' |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
427 if has_windows(): |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
428 exe = 'lfs-test-server.exe' |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
429 return any( |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
430 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
|
431 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
|
432 ) |
a2e927ded455
hghave: add a check for lfs-test-server
Matt Harbison <matt_harbison@yahoo.com>
parents:
35043
diff
changeset
|
433 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
434 |
32901
559db66dead5
hghave: add has_git_range for testing if git understands ext::sh
Sean Farley <sean@farley.io>
parents:
32856
diff
changeset
|
435 @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
|
436 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
|
437 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
|
438 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
|
439 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
440 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
441 @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
|
442 def has_docutils(): |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
9819
diff
changeset
|
443 try: |
28779
0970ebec29b4
hghave: replace relative import of docutils.core
Yuya Nishihara <yuya@tcha.org>
parents:
28761
diff
changeset
|
444 import docutils.core |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
445 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
446 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
|
447 return True |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
9819
diff
changeset
|
448 except ImportError: |
cbe400a8e217
doc: add generic frontend to rst2man and rst2html
Martin Geisler <mg@aragost.com>
parents:
9819
diff
changeset
|
449 return False |
9446
57d682d7d2da
test-gendoc: test documentation generation
Martin Geisler <mg@lazybytes.net>
parents:
9395
diff
changeset
|
450 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
451 |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
13543
diff
changeset
|
452 def getsvnversion(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
453 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
|
454 if not m: |
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
13543
diff
changeset
|
455 return (0, 0) |
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
13543
diff
changeset
|
456 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
|
457 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
458 |
28759
2348ca49aaee
hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents:
28758
diff
changeset
|
459 @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
|
460 def has_svn_range(v): |
2348ca49aaee
hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents:
28758
diff
changeset
|
461 major, minor = v.split('.')[0:2] |
2348ca49aaee
hghave: replace has_svn13/has_svn15 with checkvers
timeless <timeless@mozdev.org>
parents:
28758
diff
changeset
|
462 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
|
463 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
464 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
465 @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
|
466 def has_svn(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
467 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
|
468 'svnadmin --version 2>&1', br'^svnadmin, version' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
469 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
470 |
5253
d82ebcdf20e1
hghave: detect subversion client and admin tools availability
Patrick Mezard <pmezard@gmail.com>
parents:
5252
diff
changeset
|
471 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
472 @check("svn-bindings", "subversion python bindings") |
5254
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
473 def has_svn_bindings(): |
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
474 try: |
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
475 import svn.core |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
476 |
7315
408cf9eb9e5d
tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7061
diff
changeset
|
477 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
|
478 if version < (1, 4): |
408cf9eb9e5d
tests: run svn tests only with svn bindings >1.3
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
7061
diff
changeset
|
479 return False |
5254
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
480 return True |
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
481 except ImportError: |
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
482 return False |
d61e98a82cee
hghave: detect subversion bindings availability
Patrick Mezard <pmezard@gmail.com>
parents:
5253
diff
changeset
|
483 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
484 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
485 @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
|
486 def has_p4(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
487 return matchoutput('p4 -V', br'Rev\. P4/') and matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
488 'p4d -V', br'Rev\. P4D/' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
489 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
490 |
7823
11efa41037e2
convert: Perforce source for conversion to Mercurial
Frank Kingswood <frank@kingswood-consulting.co.uk>
parents:
7773
diff
changeset
|
491 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
492 @check("symlink", "symbolic links") |
5409
190c234c8fa0
hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents:
5308
diff
changeset
|
493 def has_symlink(): |
43455
6792da448437
hghave: disallow symlinks on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
43412
diff
changeset
|
494 # 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
|
495 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
|
496 return False |
16968
456f457e376d
tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents:
16966
diff
changeset
|
497 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
|
498 try: |
ac0da5caebec
tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents:
15568
diff
changeset
|
499 os.symlink(".", name) |
ac0da5caebec
tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents:
15568
diff
changeset
|
500 os.unlink(name) |
ac0da5caebec
tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents:
15568
diff
changeset
|
501 return True |
ac0da5caebec
tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents:
15568
diff
changeset
|
502 except (OSError, AttributeError): |
ac0da5caebec
tests: teach hghave to actually test for symlink support
Matt Mackall <mpm@selenic.com>
parents:
15568
diff
changeset
|
503 return False |
5409
190c234c8fa0
hghave: reorder check functions and entries
Patrick Mezard <pmezard@gmail.com>
parents:
5308
diff
changeset
|
504 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
505 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
506 @check("hardlink", "hardlinks") |
16971
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
507 def has_hardlink(): |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
508 from mercurial import util |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
509 |
16971
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
510 fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix) |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
511 os.close(fh) |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
512 name = tempfile.mktemp(dir='.', prefix=tempprefix) |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
513 try: |
44448
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44279
diff
changeset
|
514 util.oslink(_sys2bytes(fn), _sys2bytes(name)) |
25090
252412e24551
hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24290
diff
changeset
|
515 os.unlink(name) |
252412e24551
hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24290
diff
changeset
|
516 return True |
252412e24551
hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24290
diff
changeset
|
517 except OSError: |
252412e24551
hghave: use try/except/finally
Matt Mackall <mpm@selenic.com>
parents:
24290
diff
changeset
|
518 return False |
16971
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
519 finally: |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
520 os.unlink(fn) |
8aeb2f1ae94c
tests: introduce hghave hardlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
16970
diff
changeset
|
521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
522 |
31576
07f0cddb0594
hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents:
31413
diff
changeset
|
523 @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
|
524 def has_hardlink_whitelisted(): |
31674
b33e352c365c
hghave: use util.getfstype
Yuya Nishihara <yuya@tcha.org>
parents:
31576
diff
changeset
|
525 from mercurial import util |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
526 |
31678
1ed57a7dd904
statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents:
31674
diff
changeset
|
527 try: |
36942
bf73012877a4
hghave: fix hardlink-whitelisted check on Python 3
Augie Fackler <augie@google.com>
parents:
36941
diff
changeset
|
528 fstype = util.getfstype(b'.') |
31678
1ed57a7dd904
statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents:
31674
diff
changeset
|
529 except OSError: |
1ed57a7dd904
statfs: make getfstype() raise OSError
Yuya Nishihara <yuya@tcha.org>
parents:
31674
diff
changeset
|
530 return False |
31576
07f0cddb0594
hghave: add a check about whitelisted filesystem that supports hardlink
Jun Wu <quark@fb.com>
parents:
31413
diff
changeset
|
531 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
|
532 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
533 |
30230
46a0203dfb89
tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents:
29903
diff
changeset
|
534 @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
|
535 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
|
536 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
|
537 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
|
538 try: |
46a0203dfb89
tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents:
29903
diff
changeset
|
539 os.chdir(temp) |
46a0203dfb89
tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents:
29903
diff
changeset
|
540 # 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
|
541 # 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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 finally: |
46a0203dfb89
tests: run "cwd was removed" test only if cwd can actually be removed
Yuya Nishihara <yuya@tcha.org>
parents:
29903
diff
changeset
|
547 os.chdir(ocwd) |
30242
389cbfe63586
hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents:
30230
diff
changeset
|
548 # 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
|
549 try: |
389cbfe63586
hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents:
30230
diff
changeset
|
550 os.rmdir(temp) |
389cbfe63586
hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents:
30230
diff
changeset
|
551 except OSError: |
389cbfe63586
hghave: fix 'rmcwd' to ensure temporary directory is removed
Yuya Nishihara <yuya@tcha.org>
parents:
30230
diff
changeset
|
552 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
|
553 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
554 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
555 @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
|
556 def has_tla(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
557 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
|
558 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
559 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
560 @check("gpg", "gpg client") |
8809 | 561 def has_gpg(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
562 return matchoutput('gpg --version 2>&1', br'GnuPG') |
8809 | 563 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
564 |
29790
94fb0458a791
test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents:
29611
diff
changeset
|
565 @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
|
566 def has_gpg2(): |
94fb0458a791
test-gpg: start gpg-agent under control of the test runner
Yuya Nishihara <yuya@tcha.org>
parents:
29611
diff
changeset
|
567 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
|
568 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
569 |
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
|
570 @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
|
571 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
|
572 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
|
573 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
574 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
575 @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
|
576 def has_unix_permissions(): |
16968
456f457e376d
tests/hghave: consistently use dir='.', prefix=tempprefix for tempfiles
Mads Kiilerich <mads@kiilerich.com>
parents:
16966
diff
changeset
|
577 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
|
578 try: |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
579 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
|
580 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
|
581 os.umask(umask) |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
582 f = open(fname, 'w') |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
583 f.close() |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
584 mode = os.stat(fname).st_mode |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
585 os.unlink(fname) |
25658
e93036747902
global: mass rewrite to use modern octal syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25413
diff
changeset
|
586 if mode & 0o777 != ~umask & 0o666: |
6063
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
587 return False |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
588 return True |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
589 finally: |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
590 os.rmdir(d) |
b74a0c4bfb30
hghave: detect unix-style permissions
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5685
diff
changeset
|
591 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
592 |
22994
840be5ca03e1
cmdserver: add service that listens on unix domain socket and forks process
Yuya Nishihara <yuya@tcha.org>
parents:
22579
diff
changeset
|
593 @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
|
594 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
|
595 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
|
596 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
597 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
598 @check("root", "root permissions") |
20008
e54a078153f7
tests: skip tests that require not having root (issue4089)
Matt Mackall <mpm@selenic.com>
parents:
19931
diff
changeset
|
599 def has_root(): |
20114
390aff33c2f9
tests: fix `hghave root` on windows
Simon Heimberg <simohe@besonet.ch>
parents:
20008
diff
changeset
|
600 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
|
601 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
602 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
603 @check("pyflakes", "Pyflakes python linter") |
14140
82f0412ef7de
tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
14050
diff
changeset
|
604 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
|
605 try: |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
606 import pyflakes |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
607 |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
608 pyflakes.__version__ |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
609 except ImportError: |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
610 return False |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
611 else: |
aa0e1341457b
tests: check availability of pyflakes by trying to import pyflakes module
Manuel Jacob <me@manueljacob.de>
parents:
44483
diff
changeset
|
612 return True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
613 |
14140
82f0412ef7de
tests: add pyflakes checking for unused imports
timeless <timeless@mozdev.org>
parents:
14050
diff
changeset
|
614 |
31413
aa797bd54f44
test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30559
diff
changeset
|
615 @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
|
616 def has_pylint(): |
45943
a9797b49fb69
hghave: adjust the detection of `pylint` for modern versions
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
617 return matchoutput("pylint --help", br"Usage:[ ]+pylint", True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
618 |
31413
aa797bd54f44
test: add a basic 'test-check-pylint.t'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30559
diff
changeset
|
619 |
46405
9fd4f7af42ea
clang-format: show required version in skip message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46403
diff
changeset
|
620 @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
|
621 def has_clang_format(): |
45184
3781e9f74b27
hghave: fix possible int('') in has_clang_format()
Yuya Nishihara <yuya@tcha.org>
parents:
45172
diff
changeset
|
622 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
|
623 # style changed somewhere between 10.x and 11.x |
48289
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
624 if m: |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
625 return int(m.group(1)) >= 11 |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
626 # Assist Googler contributors, they have a centrally-maintained version of |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
627 # clang-format that is generally very fresh, but unlike most builds (both |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
628 # official and unofficial), it does *not* include a version number. |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
629 return matchoutput( |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
630 'clang-format --version', br'clang-format .*google3-trunk \([0-9a-f]+\)' |
1ff06ceb070f
tests: allow Google's internal builds of clang-format to be used
Kyle Lippincott <spectral@google.com>
parents:
47831
diff
changeset
|
631 ) |
34696
15b561fffde5
hghave: add a check for clang-format
Augie Fackler <augie@google.com>
parents:
34401
diff
changeset
|
632 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
633 |
35043
5d4369079c86
tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents:
34892
diff
changeset
|
634 @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
|
635 def has_jshint(): |
5d4369079c86
tests: use jshint when available to check .js files
Anton Shestakov <av6@dwimlabs.net>
parents:
34892
diff
changeset
|
636 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
|
637 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
638 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
639 @check("pygments", "Pygments source highlighting library") |
6355
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
640 def has_pygments(): |
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
641 try: |
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
642 import pygments |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
643 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
644 pygments.highlight # silence unused import warning |
6355
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
645 return True |
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
646 except ImportError: |
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
647 return False |
3b841c189ab7
tests: add highlight extension tests
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6079
diff
changeset
|
648 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
649 |
44119
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
650 @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
|
651 def pygments25(): |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
652 try: |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
653 import pygments |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
654 |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
655 v = pygments.__version__ |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
656 except ImportError: |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
657 return False |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
658 |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
659 parts = v.split(".") |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
660 major = int(parts[0]) |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
661 minor = int(parts[1]) |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
662 |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
663 return (major, minor) >= (2, 5) |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
664 |
5b38c2ab6ad3
tests: conditionalize test-hightlight.t on pygments version
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43819
diff
changeset
|
665 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
666 @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
|
667 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
|
668 # 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
|
669 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
|
670 |
7429
dbc40381620e
tests: Skip tests if they will fail because of outer repo
Mads Kiilerich <mads@kiilerich.com>
parents:
7315
diff
changeset
|
671 |
28591
f29cab5c519c
hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28582
diff
changeset
|
672 @check("ssl", "ssl module available") |
12740
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
673 def has_ssl(): |
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
674 try: |
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
675 import ssl |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
676 |
28591
f29cab5c519c
hghave: change ssl check to just check ssl module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28582
diff
changeset
|
677 ssl.CERT_NONE |
12740
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
678 return True |
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
679 except ImportError: |
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
680 return False |
b86c6954ec4c
serve: fix https mode and add test
Mads Kiilerich <mads@kiilerich.com>
parents:
10971
diff
changeset
|
681 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
682 |
29481
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
683 @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
|
684 def has_defaultcacertsloaded(): |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
685 import ssl |
29483
918dce4b8c26
sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29481
diff
changeset
|
686 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
|
687 |
30559
d83ca854fa21
ui: factor out ui.load() to create a ui without loading configs (API)
Yuya Nishihara <yuya@tcha.org>
parents:
30441
diff
changeset
|
688 ui = uimod.ui.load() |
29483
918dce4b8c26
sslutil: pass ui to _defaultcacerts
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29481
diff
changeset
|
689 cafile = sslutil._defaultcacerts(ui) |
29481
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
690 ctx = ssl.create_default_context() |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
691 if cafile: |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
692 ctx.load_verify_locations(cafile=cafile) |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
693 else: |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
694 ctx.load_default_certs() |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
695 |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
696 return len(ctx.get_ca_certs()) > 0 |
5caa415aa48b
tests: better testing of loaded certificates
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29140
diff
changeset
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
698 |
29601
6cff2ac0ccb9
sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29576
diff
changeset
|
699 @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
|
700 def has_tls1_2(): |
6cff2ac0ccb9
sslutil: more robustly detect protocol support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29576
diff
changeset
|
701 from mercurial import sslutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
702 |
41381
423a6b2ddafa
tests: add b'' when testing for tls1.2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41366
diff
changeset
|
703 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
|
704 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
705 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
706 @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
|
707 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
|
708 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
|
709 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
710 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
711 @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
|
712 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
|
713 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
|
714 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
715 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
716 @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
|
717 def has_serve(): |
32856
41f99a90675d
hghave: enable 'serve' on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
32770
diff
changeset
|
718 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
|
719 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
720 |
44990
62bdb288c449
tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44881
diff
changeset
|
721 @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
|
722 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
|
723 try: |
62bdb288c449
tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44881
diff
changeset
|
724 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
|
725 |
62bdb288c449
tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44881
diff
changeset
|
726 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
|
727 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
|
728 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
|
729 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
|
730 |
62bdb288c449
tests: add hghave rule 'setprocname' to check if osutil.setprocname and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44881
diff
changeset
|
731 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
732 @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
|
733 def has_test_repo(): |
0e1cbd3d52f7
tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents:
20644
diff
changeset
|
734 t = os.environ["TESTDIR"] |
0e1cbd3d52f7
tests: add repository check for pyflakes test
Matt Mackall <mpm@selenic.com>
parents:
20644
diff
changeset
|
735 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
|
736 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
737 |
46604
ad107ed7a4aa
ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents:
46405
diff
changeset
|
738 @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
|
739 def has_test_repo(): |
ad107ed7a4aa
ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents:
46405
diff
changeset
|
740 t = os.environ.get("HGTESTS_ALLOW_NETIO") |
ad107ed7a4aa
ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents:
46405
diff
changeset
|
741 return t == "1" |
ad107ed7a4aa
ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents:
46405
diff
changeset
|
742 |
ad107ed7a4aa
ci: test real dependency installation for pip
Joerg Sonnenberger <joerg@bec.de>
parents:
46405
diff
changeset
|
743 |
46325
e5e6282fa66a
hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents:
46320
diff
changeset
|
744 @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
|
745 def has_curses(): |
20304
e457321a5687
tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents:
20114
diff
changeset
|
746 try: |
e457321a5687
tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents:
20114
diff
changeset
|
747 import curses |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
748 |
20304
e457321a5687
tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents:
20114
diff
changeset
|
749 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
|
750 |
ef771d329961
hghave: adjust the definition of `tic` to allow curses tests on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
46264
diff
changeset
|
751 # 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
|
752 # 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
|
753 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
|
754 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
|
755 |
46325
e5e6282fa66a
hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents:
46320
diff
changeset
|
756 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
|
757 |
44264
d3f776c4760e
py3: catch AttributeError too with ImportError
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44119
diff
changeset
|
758 except (ImportError, AttributeError): |
20304
e457321a5687
tests: 'hghave tic' also requires curses support in Python
Mads Kiilerich <madski@unity3d.com>
parents:
20114
diff
changeset
|
759 return False |
15539
d09ea5bbc9a4
tests: skip color test on platforms without tic
Mads Kiilerich <mads@kiilerich.com>
parents:
15446
diff
changeset
|
760 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
761 |
46325
e5e6282fa66a
hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents:
46320
diff
changeset
|
762 @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
|
763 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
|
764 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
|
765 |
e5e6282fa66a
hghave: split apart testing for the curses module and `tic` executable
Matt Harbison <matt_harbison@yahoo.com>
parents:
46320
diff
changeset
|
766 |
43699
21e05aabef8c
hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents:
43470
diff
changeset
|
767 @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
|
768 def has_xz(): |
21e05aabef8c
hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents:
43470
diff
changeset
|
769 # 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
|
770 # 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
|
771 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
|
772 |
21e05aabef8c
hghave: add a check for the `xz` compression utility
Matt Harbison <matt_harbison@yahoo.com>
parents:
43470
diff
changeset
|
773 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
774 @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
|
775 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
|
776 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
|
777 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
778 |
22093
45611a306f77
tests: use a decorator for hghave checks
Matt Mackall <mpm@selenic.com>
parents:
21208
diff
changeset
|
779 @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
|
780 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
|
781 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
|
782 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
783 |
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
|
784 @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
|
785 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
|
786 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
|
787 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
788 |
29026
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
789 @check("osxpackaging", "OS X packaging tools") |
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
790 def has_osxpackaging(): |
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
791 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
792 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
793 matchoutput('pkgbuild', br'Usage: pkgbuild ', ignorestatus=1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
794 and matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
795 'productbuild', br'Usage: productbuild ', ignorestatus=1 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
796 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
797 and matchoutput('lsbom', br'Usage: lsbom', ignorestatus=1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
798 and matchoutput('xar --help', br'Usage: xar', ignorestatus=1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
799 ) |
29026
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
800 except ImportError: |
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
801 return False |
80f15aa32edd
hghave: add check for OS X packaging tools
Augie Fackler <augie@google.com>
parents:
29022
diff
changeset
|
802 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
803 |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34840
diff
changeset
|
804 @check('linuxormacos', 'Linux or MacOS') |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34840
diff
changeset
|
805 def has_linuxormacos(): |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34840
diff
changeset
|
806 # 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
|
807 return sys.platform.startswith(('linux', 'darwin')) |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34840
diff
changeset
|
808 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
809 |
26111
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
810 @check("docker", "docker support") |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
811 def has_docker(): |
29140
47eab0cb72e3
hghave: matchoutput needs to use bytes for regexp
timeless <timeless@mozdev.org>
parents:
29107
diff
changeset
|
812 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
|
813 if matchoutput('docker --help', pat): |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
814 if 'linux' not in sys.platform: |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
815 # 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
|
816 # 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
|
817 # 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
|
818 # $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
|
819 # 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
|
820 # 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
|
821 # return 'DOCKER_HOST' in os.environ |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
822 return False |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
823 |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
824 return True |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
825 return False |
dcc12365fa38
hghave: add a check for docker support
Augie Fackler <augie@google.com>
parents:
26110
diff
changeset
|
826 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
827 |
26110
2dcfb98c5314
hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents:
26109
diff
changeset
|
828 @check("debhelper", "debian packaging tools") |
2dcfb98c5314
hghave: add a check for debian packaging tools
Augie Fackler <augie@google.com>
parents:
26109
diff
changeset
|
829 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
|
830 # 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
|
831 # quote), so just accept anything in that spot. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
832 dpkg = matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
833 'dpkg --version', br"Debian .dpkg' package management program" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
834 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
835 dh = matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
836 '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
|
837 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
838 dh_py2 = matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
839 'dh_python2 --help', br'other supported Python versions' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
840 ) |
34399
200eadbcf0b0
hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents:
34394
diff
changeset
|
841 # 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
|
842 # 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
|
843 debuild = matchoutput( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
844 'debuild --help', br'to run debian/rules with given parameter' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
845 ) |
34399
200eadbcf0b0
hghave: check for debuild being installed as well
Kyle Lippincott <spectral@google.com>
parents:
34394
diff
changeset
|
846 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
|
847 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
848 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
849 @check( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
850 "debdeps", "debian build dependencies (run dpkg-checkbuilddeps in contrib/)" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
851 ) |
34401
13d3f8aaed87
tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents:
34399
diff
changeset
|
852 def has_debdeps(): |
13d3f8aaed87
tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents:
34399
diff
changeset
|
853 # 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
|
854 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
|
855 return matchoutput('dpkg-checkbuilddeps %s' % path, br'') |
13d3f8aaed87
tests: add "have" check for dpkg builddeps
Kyle Lippincott <spectral@google.com>
parents:
34399
diff
changeset
|
856 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
857 |
29867
b05a3a04f046
hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents:
29866
diff
changeset
|
858 @check("demandimport", "demandimport enabled") |
b05a3a04f046
hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents:
29866
diff
changeset
|
859 def has_demandimport(): |
34840
88624b40a9cb
hghave: disable demandimport when chg is running
Saurabh Singh <singhsrb@fb.com>
parents:
34696
diff
changeset
|
860 # chg disables demandimport intentionally for performance wins. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
861 return (not has_chg()) and os.environ.get('HGDEMANDIMPORT') != 'disable' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
862 |
29867
b05a3a04f046
hghave: add demandimport checking
timeless <timeless@mozdev.org>
parents:
29866
diff
changeset
|
863 |
43113
37af48031d6f
hghave: document format for version feature checks as <name><vers>, no dots
Kyle Lippincott <spectral@google.com>
parents:
43095
diff
changeset
|
864 # 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
|
865 # punctuation here. |
41443
1a6a01a21d6a
hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41381
diff
changeset
|
866 @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
|
867 def has_python_range(v): |
1a6a01a21d6a
hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41381
diff
changeset
|
868 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
|
869 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
|
870 |
1a6a01a21d6a
hghave: add pyXY features for Python version numbers
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41381
diff
changeset
|
871 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
|
872 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
873 |
40263
8cf459d8b111
py3: use py3 as the test tag, dropping the k
Martijn Pieters <mj@octobus.net>
parents:
39759
diff
changeset
|
874 @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
|
875 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
|
876 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
|
877 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
878 |
28582
cdbc25306696
run-tests: add --with-python3 to define a Python 3 interpreter
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28383
diff
changeset
|
879 @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
|
880 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
|
881 py = 'python3' |
94c0c36299b1
hghave: fix the definition of `python3` to work on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
46870
diff
changeset
|
882 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
|
883 py = 'py -3' |
94c0c36299b1
hghave: fix the definition of `python3` to work on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
46870
diff
changeset
|
884 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
|
885 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
886 |
25859
1619563959b3
tests: disable test of buffer overflow in parsers.c if --pure
Yuya Nishihara <yuya@tcha.org>
parents:
25658
diff
changeset
|
887 @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
|
888 def has_pure(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
889 return any( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
890 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
891 os.environ.get("HGMODULEPOLICY") == "py", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
892 os.environ.get("HGTEST_RUN_TESTS_PURE") == "--pure", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
893 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
894 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
895 |
26109
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26068
diff
changeset
|
896 |
32474
c2b7fb580794
tests: hint how to run slow tests when rejecting
Kyle Lippincott <spectral@google.com>
parents:
32245
diff
changeset
|
897 @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
|
898 def has_slow(): |
bad09bd22b6a
run-tests: add support for marking tests as very slow
Augie Fackler <augie@google.com>
parents:
26068
diff
changeset
|
899 return os.environ.get('HGTEST_SLOW') == 'slow' |
26842
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
900 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
901 |
28383
e13e0e189990
hghave: improve description of Hypothesis
timeless <timeless@mozdev.org>
parents:
28126
diff
changeset
|
902 @check("hypothesis", "Hypothesis automated test generation") |
26842
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
903 def has_hypothesis(): |
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
904 try: |
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
905 import hypothesis |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
906 |
26842
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
907 hypothesis.given |
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
908 return True |
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
909 except ImportError: |
0f76c64f5cc3
testing: add hypothesis fuzz testing
David R. MacIver <david@drmaciver.com>
parents:
26145
diff
changeset
|
910 return False |
29843
00ca4f966ca6
hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents:
29809
diff
changeset
|
911 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
912 |
29843
00ca4f966ca6
hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents:
29809
diff
changeset
|
913 @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
|
914 def unzip_understands_symlinks(): |
00ca4f966ca6
hghave: add a check for unzip(1) that understands symlinks
Augie Fackler <augie@google.com>
parents:
29809
diff
changeset
|
915 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
|
916 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
917 |
30441
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
918 @check("zstd", "zstd Python module available") |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
919 def has_zstd(): |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
920 try: |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
921 import mercurial.zstd |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
922 |
30441
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
923 mercurial.zstd.__version__ |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
924 return True |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
925 except ImportError: |
de48d3a0573a
hghave: add check for zstd support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30297
diff
changeset
|
926 return False |
31964
ebaada96aec3
stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents:
31678
diff
changeset
|
927 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
928 |
31964
ebaada96aec3
stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents:
31678
diff
changeset
|
929 @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
|
930 def has_dev_full(): |
ebaada96aec3
stdio: add Linux-specific tests for error checking
Bryan O'Sullivan <bryano@fb.com>
parents:
31678
diff
changeset
|
931 return os.path.exists('/dev/full') |
32726
a6e4c4218b71
hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents:
32474
diff
changeset
|
932 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
933 |
43412
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
934 @check("ensurepip", "ensurepip module") |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
935 def has_ensurepip(): |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
936 try: |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
937 import ensurepip |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
938 |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
939 ensurepip.bootstrap |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
940 return True |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
941 except ImportError: |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
942 return False |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
943 |
ca0cd0a13514
tests: look for ensurepip before using venv
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43406
diff
changeset
|
944 |
46097
1b5e0d0bdb05
hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents:
45987
diff
changeset
|
945 @check("virtualenv", "virtualenv support") |
1b5e0d0bdb05
hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents:
45987
diff
changeset
|
946 def has_virtualenv(): |
32726
a6e4c4218b71
hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents:
32474
diff
changeset
|
947 try: |
a6e4c4218b71
hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents:
32474
diff
changeset
|
948 import virtualenv |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
949 |
46097
1b5e0d0bdb05
hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents:
45987
diff
changeset
|
950 # --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
|
951 # 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
|
952 # script complicated, just ignore ancient versions. |
1b5e0d0bdb05
hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents:
45987
diff
changeset
|
953 return int(virtualenv.__version__.split('.')[0]) > 1 |
1b5e0d0bdb05
hghave: update the check for virtualenv
Matt Harbison <matt_harbison@yahoo.com>
parents:
45987
diff
changeset
|
954 except (AttributeError, ImportError, IndexError): |
32726
a6e4c4218b71
hghave: add check for virtualenv
Augie Fackler <augie@google.com>
parents:
32474
diff
changeset
|
955 return False |
32770
9cf74abd1252
hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents:
32726
diff
changeset
|
956 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
957 |
32770
9cf74abd1252
hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents:
32726
diff
changeset
|
958 @check("fsmonitor", "running tests with fsmonitor") |
9cf74abd1252
hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents:
32726
diff
changeset
|
959 def has_fsmonitor(): |
9cf74abd1252
hghave: add test for whether fsmonitor is enabled
Siddharth Agarwal <sid0@fb.com>
parents:
32726
diff
changeset
|
960 return 'HGFSMONITOR_TESTS' in os.environ |
33697
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
961 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
962 |
33697
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
963 @check("fuzzywuzzy", "Fuzzy string matching library") |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
964 def has_fuzzywuzzy(): |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
965 try: |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
966 import fuzzywuzzy |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
967 |
33697
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
968 fuzzywuzzy.__version__ |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
969 return True |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
970 except ImportError: |
4d1e79945c2e
releasenotes: add import check for fuzzywuzzy
Rishabh Madan <rishabhmadan96@gmail.com>
parents:
33528
diff
changeset
|
971 return False |
35668
67cead0eb671
hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents:
35139
diff
changeset
|
972 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
973 |
35668
67cead0eb671
hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents:
35139
diff
changeset
|
974 @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
|
975 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
|
976 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
|
977 if mat: |
67cead0eb671
hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents:
35139
diff
changeset
|
978 # libfuzzer is new in clang 6 |
67cead0eb671
hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents:
35139
diff
changeset
|
979 return int(mat.group(1)) > 5 |
67cead0eb671
hghave: add test for clang 6 and later
Augie Fackler <augie@google.com>
parents:
35139
diff
changeset
|
980 return False |
36678
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
981 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
982 |
38236
a6347ae6168d
test-fuzz-targets: look for clang-6.0 binary as well
Yuya Nishihara <yuya@tcha.org>
parents:
38009
diff
changeset
|
983 @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
|
984 def has_clang60(): |
41543
dddf53473315
tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41443
diff
changeset
|
985 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
|
986 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
987 |
36678
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
988 @check("xdiff", "xdiff algorithm") |
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
989 def has_xdiff(): |
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
990 try: |
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
991 from mercurial import policy |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
992 |
36678
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
993 bdiff = policy.importmod('bdiff') |
36941
3f7bbce8fbaa
hghave: fix xdiff check on Python 3
Augie Fackler <augie@google.com>
parents:
36694
diff
changeset
|
994 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
|
995 except (ImportError, AttributeError): |
36678
7834927f0243
tests: add tests about diff quality
Jun Wu <quark@fb.com>
parents:
36659
diff
changeset
|
996 return False |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
997 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
998 |
37342
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37338
diff
changeset
|
999 @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
|
1000 def has_extraextensions(): |
4e6a6d0dccee
tests: conditionalize tests based on presence of custom extensions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37338
diff
changeset
|
1001 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
|
1002 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1003 |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1004 def getrepofeatures(): |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1005 """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
|
1006 |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1007 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
|
1008 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
|
1009 mean to remove. |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1010 """ |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1011 # 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
|
1012 features = { |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37342
diff
changeset
|
1013 'bundlerepo', |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1014 'revlogstore', |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
1015 'fncache', |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1016 } |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1017 |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1018 # 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
|
1019 implies = { |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
1020 '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
|
1021 } |
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 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
|
1024 if not override: |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1025 continue |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1026 |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1027 if override.startswith('-'): |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1028 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
|
1029 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
|
1030 else: |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1031 features.add(override) |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1032 |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1033 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
|
1034 if imply.startswith('-'): |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1035 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
|
1036 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
|
1037 else: |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1038 features.add(imply) |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1039 |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1040 return features |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1041 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1042 |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1043 @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
|
1044 def has_reporevlogstore(): |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1045 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
|
1046 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1047 |
37338
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1048 @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
|
1049 def has_reposimplestore(): |
cbc4425e81b5
tests: conditionalize tests based on presence of revlogs for files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36942
diff
changeset
|
1050 return 'simplestore' in getrepofeatures() |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37342
diff
changeset
|
1051 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1052 |
37346
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37342
diff
changeset
|
1053 @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
|
1054 def has_repobundlerepo(): |
45a4799174a1
tests: disallow using simple store repo with bundlerepo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37342
diff
changeset
|
1055 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
|
1056 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1057 |
37415
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
1058 @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
|
1059 def has_repofncache(): |
c2c8962a9465
simplestore: use a custom store for the simple store repo
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37346
diff
changeset
|
1060 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
|
1061 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1062 |
47279
40b51c28b242
dirstate-v2: Update the expected output of some tests for new requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47080
diff
changeset
|
1063 @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
|
1064 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
|
1065 # 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
|
1066 return has_rust() and matchoutput( |
48319
6505d3902eac
hghave: update dirstate-v2 format config option
Raphaël Gomès <rgomes@octobus.net>
parents:
48312
diff
changeset
|
1067 'hg config format.exp-rc-dirstate-v2', b'(?i)1|yes|true|on|always' |
47279
40b51c28b242
dirstate-v2: Update the expected output of some tests for new requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47080
diff
changeset
|
1068 ) |
40b51c28b242
dirstate-v2: Update the expected output of some tests for new requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47080
diff
changeset
|
1069 |
40b51c28b242
dirstate-v2: Update the expected output of some tests for new requirement
Simon Sapin <simon.sapin@octobus.net>
parents:
47080
diff
changeset
|
1070 |
46264
7149fb17ff72
hghave: clarify `sqlite` requirements
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46177
diff
changeset
|
1071 @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
|
1072 def has_sqlite(): |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40263
diff
changeset
|
1073 try: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40263
diff
changeset
|
1074 import sqlite3 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1075 |
40453
1bf3e6041e2c
tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents:
40326
diff
changeset
|
1076 version = sqlite3.sqlite_version_info |
40326
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40263
diff
changeset
|
1077 except ImportError: |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40263
diff
changeset
|
1078 return False |
fed697fa1734
sqlitestore: file storage backend using SQLite
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40263
diff
changeset
|
1079 |
40453
1bf3e6041e2c
tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents:
40326
diff
changeset
|
1080 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
|
1081 # 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
|
1082 return False |
1bf3e6041e2c
tests: require SQLite 3.8.3+ as sqlitestore relies on "WITH" clause
Yuya Nishihara <yuya@tcha.org>
parents:
40326
diff
changeset
|
1083 |
41543
dddf53473315
tests: use raw strings for regular expressions with escapes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41443
diff
changeset
|
1084 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
|
1085 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1086 |
46393
66e8e279133b
hghave: list the module needed for the `vcr` check
Matt Harbison <matt_harbison@yahoo.com>
parents:
46325
diff
changeset
|
1087 @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
|
1088 def has_vcr(): |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1089 try: |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1090 import vcr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1091 |
39648
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1092 vcr.VCR |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1093 return True |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1094 except (ImportError, AttributeError): |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1095 pass |
e37a0fcd82c0
hghave: add a checker for the vcr HTTP record/replay library
Augie Fackler <raf@durin42.com>
parents:
39402
diff
changeset
|
1096 return False |
41787
2a6ca0d94b70
hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
1097 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42215
diff
changeset
|
1098 |
41787
2a6ca0d94b70
hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
1099 @check('emacs', 'GNU Emacs') |
2a6ca0d94b70
hghave: add check for GNU emacs
Augie Fackler <augie@google.com>
parents:
41759
diff
changeset
|
1100 def has_emacs(): |
41842
28842adf8ed5
hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents:
41787
diff
changeset
|
1101 # 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
|
1102 # 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
|
1103 # 24 release) |
28842adf8ed5
hghave: skip emacs tests on 24.3 and earlier
Augie Fackler <augie@google.com>
parents:
41787
diff
changeset
|
1104 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
|
1105 |
fb41ea2ea076
formatting: introduce a `test-check-format-black.t` that enforce formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43076
diff
changeset
|
1106 |
46403
959d581bb625
black: show required version in skip message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46393
diff
changeset
|
1107 @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
|
1108 def has_black(): |
43347
abb95b6f79d3
formatting: using black to check for formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43194
diff
changeset
|
1109 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
|
1110 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
|
1111 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
|
1112 sv = distutils.version.StrictVersion |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45553
diff
changeset
|
1113 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
|
1114 |
32ac4d0b4102
hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents:
43455
diff
changeset
|
1115 |
32ac4d0b4102
hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents:
43455
diff
changeset
|
1116 @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
|
1117 def has_pytype(): |
32ac4d0b4102
hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents:
43455
diff
changeset
|
1118 pytypecmd = 'pytype --version' |
32ac4d0b4102
hghave: add a check for pytype, Google's Python type checker
Augie Fackler <augie@google.com>
parents:
43455
diff
changeset
|
1119 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
|
1120 sv = distutils.version.StrictVersion |
44448
55c443fcb4fc
tests: rename _bytespath() to _sys2bytes() and _strpath() to _sys2str()
Manuel Jacob <me@manueljacob.de>
parents:
44279
diff
changeset
|
1121 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
|
1122 |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43699
diff
changeset
|
1123 |
45987
d42809b6b10f
rust-format: pin the formatted to a specific nightly version
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45943
diff
changeset
|
1124 @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
|
1125 def has_rustfmt(): |
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43699
diff
changeset
|
1126 # 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
|
1127 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
|
1128 '`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
|
1129 b'rustfmt', |
43819
e8a3bbffdc7d
tests: add test for Rust formatting
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43699
diff
changeset
|
1130 ) |
45048
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1131 |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1132 |
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
|
1133 @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
|
1134 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
|
1135 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
|
1136 |
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
|
1137 |
45048
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1138 @check("lzma", "python lzma module") |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1139 def has_lzma(): |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1140 try: |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1141 import _lzma |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1142 |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1143 _lzma.FORMAT_XZ |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1144 return True |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1145 except ImportError: |
2c0043977b6d
archival: abort if compression method is unavailable
Manuel Jacob <me@manueljacob.de>
parents:
44640
diff
changeset
|
1146 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
|
1147 |
97f04eaafa65
tests: add req on bash for test-transaction-rollback-on-sigpipe (issue6429)
Augie Fackler <augie@google.com>
parents:
47279
diff
changeset
|
1148 |
97f04eaafa65
tests: add req on bash for test-transaction-rollback-on-sigpipe (issue6429)
Augie Fackler <augie@google.com>
parents:
47279
diff
changeset
|
1149 @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
|
1150 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
|
1151 return matchoutput("bash -c 'echo hi'", b'^hi$') |
48521
f447b90a4b11
tests: allow for variation in zstd output as seen on s390x and powerpc
Julien Cristau <jcristau@debian.org>
parents:
48441
diff
changeset
|
1152 |
f447b90a4b11
tests: allow for variation in zstd output as seen on s390x and powerpc
Julien Cristau <jcristau@debian.org>
parents:
48441
diff
changeset
|
1153 |
f447b90a4b11
tests: allow for variation in zstd output as seen on s390x and powerpc
Julien Cristau <jcristau@debian.org>
parents:
48441
diff
changeset
|
1154 @check("bigendian", "big-endian CPU") |
f447b90a4b11
tests: allow for variation in zstd output as seen on s390x and powerpc
Julien Cristau <jcristau@debian.org>
parents:
48441
diff
changeset
|
1155 def has_bigendian(): |
f447b90a4b11
tests: allow for variation in zstd output as seen on s390x and powerpc
Julien Cristau <jcristau@debian.org>
parents:
48441
diff
changeset
|
1156 return sys.byteorder == 'big' |