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