py3: add warnings in check-code related to py3
We have our own bytes versions of things like, getopt.getopt, os.sep, os.name,
sys.executable, os.environ and few more for python 3 portability. Its better
to come up with warnings if someone breaks the things which we have fixed.
After this patch, check-code will warn us to use our bytes version.
These checks run on mercurial/ and hgext/ and pycompat.py is excluded.
--- a/contrib/check-code.py Mon Dec 19 02:54:49 2016 +0530
+++ b/contrib/check-code.py Wed Dec 21 22:42:31 2016 +0530
@@ -456,8 +456,26 @@
[],
]
+py3pats = [
+ [
+ (r'os\.environ', "use encoding.environ instead (py3)"),
+ (r'os\.name', "use pycompat.osname instead (py3)"),
+ (r'os\.getcwd', "use pycompat.getcwd instead (py3)"),
+ (r'os\.sep', "use pycompat.ossep instead (py3)"),
+ (r'os\.pathsep', "use pycompat.ospathsep instead (py3)"),
+ (r'os\.altsep', "use pycompat.osaltsep instead (py3)"),
+ (r'os\.getenv', "use pycompat.osgetenv instead (py3)"),
+ (r'sys\.platform', "use pycompat.sysplatform instead (py3)"),
+ (r'getopt\.getopt', "use pycompat.getoptb instead (py3)"),
+ ],
+ # warnings
+ [],
+]
+
checks = [
('python', r'.*\.(py|cgi)$', r'^#!.*python', pyfilters, pypats),
+ ('python 3', r'.*(hgext|mercurial).*(?<!pycompat)\.py', '',
+ pyfilters, py3pats),
('test script', r'(.*/)?test-[^.~]*$', '', testfilters, testpats),
('c', r'.*\.[ch]$', '', cfilters, cpats),
('unified test', r'.*\.t$', '', utestfilters, utestpats),
--- a/tests/test-check-code.t Mon Dec 19 02:54:49 2016 +0530
+++ b/tests/test-check-code.t Wed Dec 21 22:42:31 2016 +0530
@@ -9,10 +9,47 @@
$ hg locate -X contrib/python-zstandard -X hgext/fsmonitor/pywatchman |
> sed 's-\\-/-g' | xargs "$check_code" --warnings --per-file=0 || false
+ hgext/fsmonitor/__init__.py:295:
+ > switch_slashes = os.sep == '\\'
+ use pycompat.ossep instead (py3)
+ hgext/fsmonitor/__init__.py:395:
+ > if 'FSMONITOR_LOG_FILE' in os.environ:
+ use encoding.environ instead (py3)
+ hgext/fsmonitor/__init__.py:396:
+ > fn = os.environ['FSMONITOR_LOG_FILE']
+ use encoding.environ instead (py3)
+ hgext/fsmonitor/__init__.py:437:
+ > 'HG_PENDING' not in os.environ)
+ use encoding.environ instead (py3)
+ hgext/fsmonitor/__init__.py:548:
+ > if sys.platform == 'darwin':
+ use pycompat.sysplatform instead (py3)
Skipping i18n/polib.py it has no-che?k-code (glob)
+ mercurial/demandimport.py:309:
+ > if os.environ.get('HGDEMANDIMPORT') != 'disable':
+ use encoding.environ instead (py3)
+ mercurial/encoding.py:54:
+ > environ = os.environ
+ use encoding.environ instead (py3)
+ mercurial/encoding.py:56:
+ > environ = os.environb
+ use encoding.environ instead (py3)
+ mercurial/encoding.py:61:
+ > for k, v in os.environ.items())
+ use encoding.environ instead (py3)
+ mercurial/encoding.py:203:
+ > for k, v in os.environ.items())
+ use encoding.environ instead (py3)
Skipping mercurial/httpclient/__init__.py it has no-che?k-code (glob)
Skipping mercurial/httpclient/_readers.py it has no-che?k-code (glob)
+ mercurial/policy.py:45:
+ > policy = os.environ.get('HGMODULEPOLICY', policy)
+ use encoding.environ instead (py3)
Skipping mercurial/statprof.py it has no-che?k-code (glob)
+ mercurial/win32.py:443:
+ > env, os.getcwd(), ctypes.byref(si), ctypes.byref(pi))
+ use pycompat.getcwd instead (py3)
+ [1]
@commands in debugcommands.py should be in alphabetical order.