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