Mercurial > hg
comparison tests/test-check-py3-compat.t @ 27279:40eb385f798f
tests: add test for Python 3 compatibility
Python 3 is inevitable. There have been incremental movements towards
converting the code base to be Python 3 compatible. Unfortunately, we
don't have any tests that look for Python 3 compatibility. This patch
changes that.
We introduce a check-py3-compat.py script whose role is to verify
Python 3 compatibility of the files passed in. We add a test that
calls this script with all .py files from the source checkout.
The script currently only verifies that absolute_import and
print_function are used. These are the low hanging fruits for Python
compatbility. Over time, we can include more checks, including
verifying we're able to load each Python file with Python 3. You
have to start somewhere.
Accepting this patch means that all new .py files must have
absolute_import and print_function (if "print" is used) to avoid
a new warning about Python 3 incompatibility. We've already
converted several files to use absolute_import and print_function
is in the same boat, so I don't think this is such a radical
proposition.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 06 Dec 2015 22:39:12 -0800 |
parents | |
children | 4056fdf71aff |
comparison
equal
deleted
inserted
replaced
27278:42aa0e570eaa | 27279:40eb385f798f |
---|---|
1 #require test-repo | |
2 | |
3 $ cd "$TESTDIR"/.. | |
4 | |
5 $ hg files 'set:(**.py)' | xargs python contrib/check-py3-compat.py | |
6 contrib/casesmash.py not using absolute_import | |
7 contrib/check-code.py not using absolute_import | |
8 contrib/check-code.py requires print_function | |
9 contrib/check-config.py not using absolute_import | |
10 contrib/check-config.py requires print_function | |
11 contrib/debugcmdserver.py not using absolute_import | |
12 contrib/debugcmdserver.py requires print_function | |
13 contrib/debugshell.py not using absolute_import | |
14 contrib/fixpax.py not using absolute_import | |
15 contrib/fixpax.py requires print_function | |
16 contrib/hgclient.py not using absolute_import | |
17 contrib/hgclient.py requires print_function | |
18 contrib/hgfixes/__init__.py not using absolute_import | |
19 contrib/hgfixes/fix_bytes.py not using absolute_import | |
20 contrib/hgfixes/fix_bytesmod.py not using absolute_import | |
21 contrib/hgfixes/fix_leftover_imports.py not using absolute_import | |
22 contrib/import-checker.py not using absolute_import | |
23 contrib/import-checker.py requires print_function | |
24 contrib/memory.py not using absolute_import | |
25 contrib/perf.py not using absolute_import | |
26 contrib/python-hook-examples.py not using absolute_import | |
27 contrib/revsetbenchmarks.py not using absolute_import | |
28 contrib/revsetbenchmarks.py requires print_function | |
29 contrib/showstack.py not using absolute_import | |
30 contrib/synthrepo.py not using absolute_import | |
31 contrib/win32/hgwebdir_wsgi.py not using absolute_import | |
32 doc/check-seclevel.py not using absolute_import | |
33 doc/gendoc.py not using absolute_import | |
34 doc/hgmanpage.py not using absolute_import | |
35 hgext/__init__.py not using absolute_import | |
36 hgext/acl.py not using absolute_import | |
37 hgext/blackbox.py not using absolute_import | |
38 hgext/bugzilla.py not using absolute_import | |
39 hgext/censor.py not using absolute_import | |
40 hgext/children.py not using absolute_import | |
41 hgext/churn.py not using absolute_import | |
42 hgext/clonebundles.py not using absolute_import | |
43 hgext/color.py not using absolute_import | |
44 hgext/convert/__init__.py not using absolute_import | |
45 hgext/convert/bzr.py not using absolute_import | |
46 hgext/convert/common.py not using absolute_import | |
47 hgext/convert/convcmd.py not using absolute_import | |
48 hgext/convert/cvs.py not using absolute_import | |
49 hgext/convert/cvsps.py not using absolute_import | |
50 hgext/convert/darcs.py not using absolute_import | |
51 hgext/convert/filemap.py not using absolute_import | |
52 hgext/convert/git.py not using absolute_import | |
53 hgext/convert/gnuarch.py not using absolute_import | |
54 hgext/convert/hg.py not using absolute_import | |
55 hgext/convert/monotone.py not using absolute_import | |
56 hgext/convert/p4.py not using absolute_import | |
57 hgext/convert/subversion.py not using absolute_import | |
58 hgext/convert/transport.py not using absolute_import | |
59 hgext/eol.py not using absolute_import | |
60 hgext/extdiff.py not using absolute_import | |
61 hgext/factotum.py not using absolute_import | |
62 hgext/fetch.py not using absolute_import | |
63 hgext/gpg.py not using absolute_import | |
64 hgext/graphlog.py not using absolute_import | |
65 hgext/hgcia.py not using absolute_import | |
66 hgext/hgk.py not using absolute_import | |
67 hgext/highlight/__init__.py not using absolute_import | |
68 hgext/highlight/highlight.py not using absolute_import | |
69 hgext/histedit.py not using absolute_import | |
70 hgext/keyword.py not using absolute_import | |
71 hgext/largefiles/__init__.py not using absolute_import | |
72 hgext/largefiles/basestore.py not using absolute_import | |
73 hgext/largefiles/lfcommands.py not using absolute_import | |
74 hgext/largefiles/lfutil.py not using absolute_import | |
75 hgext/largefiles/localstore.py not using absolute_import | |
76 hgext/largefiles/overrides.py not using absolute_import | |
77 hgext/largefiles/proto.py not using absolute_import | |
78 hgext/largefiles/remotestore.py not using absolute_import | |
79 hgext/largefiles/reposetup.py not using absolute_import | |
80 hgext/largefiles/uisetup.py not using absolute_import | |
81 hgext/largefiles/wirestore.py not using absolute_import | |
82 hgext/mq.py not using absolute_import | |
83 hgext/notify.py not using absolute_import | |
84 hgext/pager.py not using absolute_import | |
85 hgext/patchbomb.py not using absolute_import | |
86 hgext/purge.py not using absolute_import | |
87 hgext/rebase.py not using absolute_import | |
88 hgext/record.py not using absolute_import | |
89 hgext/relink.py not using absolute_import | |
90 hgext/schemes.py not using absolute_import | |
91 hgext/share.py not using absolute_import | |
92 hgext/shelve.py not using absolute_import | |
93 hgext/strip.py not using absolute_import | |
94 hgext/transplant.py not using absolute_import | |
95 hgext/win32mbcs.py not using absolute_import | |
96 hgext/win32text.py not using absolute_import | |
97 hgext/zeroconf/Zeroconf.py not using absolute_import | |
98 hgext/zeroconf/Zeroconf.py requires print_function | |
99 hgext/zeroconf/__init__.py not using absolute_import | |
100 i18n/check-translation.py not using absolute_import | |
101 i18n/polib.py not using absolute_import | |
102 mercurial/byterange.py not using absolute_import | |
103 mercurial/cmdutil.py not using absolute_import | |
104 mercurial/commands.py not using absolute_import | |
105 mercurial/commandserver.py not using absolute_import | |
106 mercurial/context.py not using absolute_import | |
107 mercurial/destutil.py not using absolute_import | |
108 mercurial/dirstate.py not using absolute_import | |
109 mercurial/dispatch.py requires print_function | |
110 mercurial/encoding.py not using absolute_import | |
111 mercurial/exchange.py not using absolute_import | |
112 mercurial/help.py not using absolute_import | |
113 mercurial/httpclient/__init__.py not using absolute_import | |
114 mercurial/httpclient/_readers.py not using absolute_import | |
115 mercurial/httpclient/socketutil.py not using absolute_import | |
116 mercurial/httpconnection.py not using absolute_import | |
117 mercurial/keepalive.py not using absolute_import | |
118 mercurial/keepalive.py requires print_function | |
119 mercurial/localrepo.py not using absolute_import | |
120 mercurial/lsprof.py requires print_function | |
121 mercurial/lsprofcalltree.py not using absolute_import | |
122 mercurial/lsprofcalltree.py requires print_function | |
123 mercurial/mail.py requires print_function | |
124 mercurial/manifest.py not using absolute_import | |
125 mercurial/mdiff.py not using absolute_import | |
126 mercurial/obsolete.py not using absolute_import | |
127 mercurial/patch.py not using absolute_import | |
128 mercurial/pure/__init__.py not using absolute_import | |
129 mercurial/pure/base85.py not using absolute_import | |
130 mercurial/pure/bdiff.py not using absolute_import | |
131 mercurial/pure/diffhelpers.py not using absolute_import | |
132 mercurial/pure/mpatch.py not using absolute_import | |
133 mercurial/pure/osutil.py not using absolute_import | |
134 mercurial/pure/parsers.py not using absolute_import | |
135 mercurial/pvec.py not using absolute_import | |
136 mercurial/py3kcompat.py not using absolute_import | |
137 mercurial/revlog.py not using absolute_import | |
138 mercurial/scmposix.py not using absolute_import | |
139 mercurial/scmutil.py not using absolute_import | |
140 mercurial/scmwindows.py not using absolute_import | |
141 mercurial/similar.py not using absolute_import | |
142 mercurial/store.py not using absolute_import | |
143 mercurial/util.py not using absolute_import | |
144 mercurial/windows.py not using absolute_import | |
145 setup.py not using absolute_import | |
146 tests/autodiff.py not using absolute_import | |
147 tests/dumbhttp.py not using absolute_import | |
148 tests/fakedirstatewritetime.py not using absolute_import | |
149 tests/fakepatchtime.py not using absolute_import | |
150 tests/filterpyflakes.py not using absolute_import | |
151 tests/filterpyflakes.py requires print_function | |
152 tests/generate-working-copy-states.py not using absolute_import | |
153 tests/generate-working-copy-states.py requires print_function | |
154 tests/get-with-headers.py not using absolute_import | |
155 tests/get-with-headers.py requires print_function | |
156 tests/heredoctest.py not using absolute_import | |
157 tests/heredoctest.py requires print_function | |
158 tests/hghave.py not using absolute_import | |
159 tests/hgweberror.py not using absolute_import | |
160 tests/hypothesishelpers.py not using absolute_import | |
161 tests/hypothesishelpers.py requires print_function | |
162 tests/killdaemons.py not using absolute_import | |
163 tests/md5sum.py not using absolute_import | |
164 tests/mockblackbox.py not using absolute_import | |
165 tests/printenv.py not using absolute_import | |
166 tests/readlink.py not using absolute_import | |
167 tests/readlink.py requires print_function | |
168 tests/revlog-formatv0.py not using absolute_import | |
169 tests/run-tests.py not using absolute_import | |
170 tests/seq.py not using absolute_import | |
171 tests/seq.py requires print_function | |
172 tests/silenttestrunner.py not using absolute_import | |
173 tests/silenttestrunner.py requires print_function | |
174 tests/sitecustomize.py not using absolute_import | |
175 tests/svn-safe-append.py not using absolute_import | |
176 tests/svnxml.py not using absolute_import | |
177 tests/test-ancestor.py not using absolute_import | |
178 tests/test-ancestor.py requires print_function | |
179 tests/test-atomictempfile.py not using absolute_import | |
180 tests/test-batching.py not using absolute_import | |
181 tests/test-batching.py requires print_function | |
182 tests/test-bdiff.py not using absolute_import | |
183 tests/test-bdiff.py requires print_function | |
184 tests/test-context.py not using absolute_import | |
185 tests/test-context.py requires print_function | |
186 tests/test-demandimport.py not using absolute_import | |
187 tests/test-demandimport.py requires print_function | |
188 tests/test-dispatch.py not using absolute_import | |
189 tests/test-dispatch.py requires print_function | |
190 tests/test-doctest.py not using absolute_import | |
191 tests/test-duplicateoptions.py not using absolute_import | |
192 tests/test-duplicateoptions.py requires print_function | |
193 tests/test-filecache.py not using absolute_import | |
194 tests/test-filecache.py requires print_function | |
195 tests/test-filelog.py not using absolute_import | |
196 tests/test-filelog.py requires print_function | |
197 tests/test-hg-parseurl.py not using absolute_import | |
198 tests/test-hg-parseurl.py requires print_function | |
199 tests/test-hgweb-auth.py not using absolute_import | |
200 tests/test-hgweb-auth.py requires print_function | |
201 tests/test-hgwebdir-paths.py not using absolute_import | |
202 tests/test-hybridencode.py not using absolute_import | |
203 tests/test-hybridencode.py requires print_function | |
204 tests/test-lrucachedict.py not using absolute_import | |
205 tests/test-lrucachedict.py requires print_function | |
206 tests/test-manifest.py not using absolute_import | |
207 tests/test-minirst.py not using absolute_import | |
208 tests/test-minirst.py requires print_function | |
209 tests/test-parseindex2.py not using absolute_import | |
210 tests/test-parseindex2.py requires print_function | |
211 tests/test-pathencode.py not using absolute_import | |
212 tests/test-pathencode.py requires print_function | |
213 tests/test-propertycache.py not using absolute_import | |
214 tests/test-propertycache.py requires print_function | |
215 tests/test-revlog-ancestry.py not using absolute_import | |
216 tests/test-revlog-ancestry.py requires print_function | |
217 tests/test-run-tests.py not using absolute_import | |
218 tests/test-simplemerge.py not using absolute_import | |
219 tests/test-status-inprocess.py not using absolute_import | |
220 tests/test-status-inprocess.py requires print_function | |
221 tests/test-symlink-os-yes-fs-no.py not using absolute_import | |
222 tests/test-trusted.py not using absolute_import | |
223 tests/test-trusted.py requires print_function | |
224 tests/test-ui-color.py not using absolute_import | |
225 tests/test-ui-color.py requires print_function | |
226 tests/test-ui-config.py not using absolute_import | |
227 tests/test-ui-config.py requires print_function | |
228 tests/test-ui-verbosity.py not using absolute_import | |
229 tests/test-ui-verbosity.py requires print_function | |
230 tests/test-url.py not using absolute_import | |
231 tests/test-url.py requires print_function | |
232 tests/test-walkrepo.py not using absolute_import | |
233 tests/test-walkrepo.py requires print_function | |
234 tests/test-wireproto.py not using absolute_import | |
235 tests/test-wireproto.py requires print_function | |
236 tests/tinyproxy.py not using absolute_import | |
237 tests/tinyproxy.py requires print_function |