Mercurial > hg
annotate contrib/python3-ratchet.py @ 52275:843c250fb2de stable
wheel: also build wheel for linux arm64 in the CI
We don't test them yet, but we build them, as as many other flavors.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 13 Nov 2024 22:42:35 +0100 |
parents | 905bc9d0a149 |
children |
rev | line source |
---|---|
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
1 # Copyright 2012 Facebook |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
2 # |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
5 """Find tests that newly pass under Python 3. |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
6 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
7 The approach is simple: we maintain a whitelist of Python 3 passing |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
8 tests in the repository, and periodically run all the /other/ tests |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 and look for new passes. Any newly passing tests get automatically |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 added to the whitelist. |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 You probably want to run it like this: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 $ cd tests |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
15 $ python3 ../contrib/python3-ratchet.py \ |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 > --working-tests=../contrib/python3-whitelist |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
17 """ |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
18 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
19 import argparse |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
20 import json |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
21 import os |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
22 import subprocess |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
23 import sys |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
24 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
25 _hgenv = dict(os.environ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
26 _hgenv.update( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
27 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
28 'HGPLAIN': '1', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
43506
diff
changeset
|
29 } |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
30 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
31 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
32 _HG_FIRST_CHANGE = '9117c6561b0bd7792fa13b50d28239d51b78e51f' |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
33 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
34 |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 def _runhg(*args): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
36 return subprocess.check_output(args, env=_hgenv) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
37 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
38 |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
39 def _is_hg_repo(path): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
40 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
41 _runhg('hg', 'log', '-R', path, '-r0', '--template={node}').strip() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
42 == _HG_FIRST_CHANGE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
43 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
44 |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
45 |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
46 def _py3default(): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
47 if sys.version_info[0] >= 3: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
48 return sys.executable |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
49 return 'python3' |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
50 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
51 |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
52 def main(argv=()): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
53 p = argparse.ArgumentParser() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
54 p.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
55 '--working-tests', help='List of tests that already work in Python 3.' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
56 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
57 p.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
58 '--commit-to-repo', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
59 help='If set, commit newly fixed tests to the given repo', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
60 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
61 p.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
62 '-j', |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
63 default=os.sysconf('SC_NPROCESSORS_ONLN'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
64 type=int, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
65 help='Number of parallel tests to run.', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
66 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
67 p.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
68 '--python3', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
69 default=_py3default(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
70 help='python3 interpreter to use for test run', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
71 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
72 p.add_argument( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
73 '--commit-user', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
74 default='python3-ratchet@mercurial-scm.org', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
75 help='Username to specify when committing to a repo.', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
76 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
77 opts = p.parse_args(argv) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
78 if opts.commit_to_repo: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
79 if not _is_hg_repo(opts.commit_to_repo): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
80 print('abort: specified repository is not the hg repository') |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
81 sys.exit(1) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
82 if not opts.working_tests or not os.path.isfile(opts.working_tests): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
83 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
84 'abort: --working-tests must exist and be a file (got %r)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
85 % opts.working_tests |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
86 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
87 sys.exit(1) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
88 elif opts.commit_to_repo: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
89 root = _runhg('hg', 'root').strip() |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
90 if not opts.working_tests.startswith(root): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
91 print( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
92 'abort: if --commit-to-repo is given, ' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
93 '--working-tests must be from that repo' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
94 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
95 sys.exit(1) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
96 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
97 rt = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
98 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
99 opts.python3, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
100 'run-tests.py', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
101 '-j', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
102 str(opts.j), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
103 '--blacklist', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
104 opts.working_tests, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
105 '--json', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
106 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
107 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
108 rt.wait() |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
109 with open('report.json') as f: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
110 data = f.read() |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
111 report = json.loads(data.split('=', 1)[1]) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
112 newpass = set() |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
113 for test, result in report.items(): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
114 if result['result'] != 'success': |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
115 continue |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
116 # A new passing test! Huzzah! |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
117 newpass.add(test) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
118 if newpass: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
119 # We already validated the repo, so we can just dive right in |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
120 # and commit. |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
121 if opts.commit_to_repo: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
122 print(len(newpass), 'new passing tests on Python 3!') |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
123 with open(opts.working_tests) as f: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
124 oldpass = {l for l in f.read().splitlines() if l} |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
125 with open(opts.working_tests, 'w') as f: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
126 for p in sorted(oldpass | newpass): |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
127 f.write('%s\n' % p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
128 _runhg( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
129 'hg', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
130 'commit', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
131 '-R', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
132 opts.commit_to_repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
133 '--user', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
134 opts.commit_user, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
135 '--message', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
136 'python3: expand list of passing tests', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
137 ) |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
138 else: |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
139 print('Newly passing tests:', '\n'.join(sorted(newpass))) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
140 sys.exit(2) |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
141 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
36589
diff
changeset
|
142 |
32855
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
143 if __name__ == '__main__': |
28f429d19a71
contrib: add a ratchet for tests in Python 3
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
144 main(sys.argv[1:]) |