mirror of https://github.com/zulip/zulip.git
tools: Remove old python 3 compatibility checker.
Now that we've migrated over to Python 3, this tool is no longer required. Fixes #6217.
This commit is contained in:
parent
ff346f93b5
commit
8dff14430e
|
@ -200,27 +200,3 @@ Firebug for Firefox is also pretty good. They both have profilers, but
|
||||||
Chrome's is a sampling profiler while Firebug's is an instrumenting
|
Chrome's is a sampling profiler while Firebug's is an instrumenting
|
||||||
profiler. Using them both can be helpful because they provide different
|
profiler. Using them both can be helpful because they provide different
|
||||||
information.
|
information.
|
||||||
|
|
||||||
## Python 3 Compatibility
|
|
||||||
|
|
||||||
Zulip is working on supporting Python 3, and all new code in Zulip
|
|
||||||
should be Python 2+3 compatible. We have converted most of the codebase
|
|
||||||
to be compatible with Python 3 using a suite of 2to3 conversion tools
|
|
||||||
and some manual work. In order to avoid regressions in that
|
|
||||||
compatibility as we continue to develop new features in Zulip, we have a
|
|
||||||
special tool, `tools/check-py3`, which checks all code for Python 3
|
|
||||||
syntactic compatibility by running a subset of the automated migration
|
|
||||||
tools and checking if they trigger any changes. `tools/check-py3` is run
|
|
||||||
automatically in Zulip's Travis CI tests (in the 'static-analysis'
|
|
||||||
build) to avoid any regressions, but is not included in `test-all` since
|
|
||||||
it is quite slow.
|
|
||||||
|
|
||||||
To run `tools/check-py3`, you need to install the `modernize` and
|
|
||||||
`future` Python packages (which are included in
|
|
||||||
`requirements/py3k.txt`, which itself is included in
|
|
||||||
`requirements/dev.txt`, so you probably already have these packages
|
|
||||||
installed).
|
|
||||||
|
|
||||||
To run `check-py3` on just the Python files in a particular directory, you
|
|
||||||
can change the current working directory (e.g. `cd zerver/`) and run
|
|
||||||
`check-py3` from there.
|
|
||||||
|
|
|
@ -5,10 +5,10 @@ dev prod
|
||||||
+ + +
|
+ + +
|
||||||
| +->common<-+
|
| +->common<-+
|
||||||
v
|
v
|
||||||
mypy,docs,py3k
|
mypy,docs
|
||||||
```
|
```
|
||||||
|
|
||||||
Of the files, only dev, prod, py3k, and mypy have been used in the install
|
Of the files, only dev, prod, and mypy have been used in the install
|
||||||
scripts directly. The rest are implicit dependencies.
|
scripts directly. The rest are implicit dependencies.
|
||||||
|
|
||||||
common and dev are locked.
|
common and dev are locked.
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
# moto s3 mock
|
# moto s3 mock
|
||||||
moto==1.0.1
|
moto==1.0.1
|
||||||
|
|
||||||
-r py3k.txt
|
|
||||||
|
|
||||||
# Needed for running tools/run-dev.py
|
# Needed for running tools/run-dev.py
|
||||||
Twisted==17.5.0
|
Twisted==17.5.0
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ docopt==0.6.2
|
||||||
docutils==0.14
|
docutils==0.14
|
||||||
first==2.0.1
|
first==2.0.1
|
||||||
fonttools==3.15.0
|
fonttools==3.15.0
|
||||||
future==0.16.0
|
future==0.16.0 # via python-twitter
|
||||||
gitdb==0.6.4
|
gitdb==0.6.4
|
||||||
gitlint==0.8.2
|
gitlint==0.8.2
|
||||||
google-api-python-client==1.6.2
|
google-api-python-client==1.6.2
|
||||||
|
@ -72,7 +72,6 @@ markdown-include==0.5.1
|
||||||
markdown==2.6.9 # via markdown-include
|
markdown==2.6.9 # via markdown-include
|
||||||
markupsafe==1.0
|
markupsafe==1.0
|
||||||
mock==2.0.0
|
mock==2.0.0
|
||||||
modernize==0.5
|
|
||||||
moto==1.0.1
|
moto==1.0.1
|
||||||
ndg-httpsclient==0.4.2
|
ndg-httpsclient==0.4.2
|
||||||
oauth2client==4.1.2
|
oauth2client==4.1.2
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
six==1.10.0
|
|
||||||
typing==3.6.2
|
|
||||||
future==0.16.0
|
|
||||||
modernize==0.5
|
|
134
tools/check-py3
134
tools/check-py3
|
@ -1,134 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
fixers="
|
|
||||||
lib2to3.fixes.fix_apply
|
|
||||||
lib2to3.fixes.fix_except
|
|
||||||
lib2to3.fixes.fix_exitfunc
|
|
||||||
lib2to3.fixes.fix_funcattrs
|
|
||||||
lib2to3.fixes.fix_has_key
|
|
||||||
lib2to3.fixes.fix_idioms
|
|
||||||
lib2to3.fixes.fix_intern
|
|
||||||
lib2to3.fixes.fix_isinstance
|
|
||||||
lib2to3.fixes.fix_methodattrs
|
|
||||||
lib2to3.fixes.fix_ne
|
|
||||||
lib2to3.fixes.fix_numliterals
|
|
||||||
lib2to3.fixes.fix_paren
|
|
||||||
lib2to3.fixes.fix_reduce
|
|
||||||
lib2to3.fixes.fix_renames
|
|
||||||
lib2to3.fixes.fix_repr
|
|
||||||
lib2to3.fixes.fix_standarderror
|
|
||||||
lib2to3.fixes.fix_sys_exc
|
|
||||||
lib2to3.fixes.fix_throw
|
|
||||||
lib2to3.fixes.fix_tuple_params
|
|
||||||
lib2to3.fixes.fix_types
|
|
||||||
lib2to3.fixes.fix_ws_comma
|
|
||||||
lib2to3.fixes.fix_xreadlines
|
|
||||||
libfuturize.fixes.fix_absolute_import
|
|
||||||
libfuturize.fixes.fix_future_standard_library_urllib
|
|
||||||
libfuturize.fixes.fix_next_call
|
|
||||||
libfuturize.fixes.fix_print_with_import
|
|
||||||
libfuturize.fixes.fix_raise
|
|
||||||
libmodernize.fixes.fix_basestring
|
|
||||||
libfuturize.fixes.fix_division_safe
|
|
||||||
libmodernize.fixes.fix_file
|
|
||||||
libmodernize.fixes.fix_filter
|
|
||||||
libmodernize.fixes.fix_imports_six
|
|
||||||
libmodernize.fixes.fix_input_six
|
|
||||||
libmodernize.fixes.fix_int_long_tuple
|
|
||||||
libmodernize.fixes.fix_map
|
|
||||||
libmodernize.fixes.fix_raise_six
|
|
||||||
libmodernize.fixes.fix_xrange_six
|
|
||||||
libmodernize.fixes.fix_zip
|
|
||||||
libmodernize.fixes.fix_unicode_type
|
|
||||||
libpasteurize.fixes.fix_newstyle
|
|
||||||
"
|
|
||||||
|
|
||||||
echo; echo "Testing for additions of Python 2 patterns we've removed as part of moving towards Python 3 compatibility."; echo
|
|
||||||
|
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
|
||||||
echo "The repository is not clean. check-py3 can only be run if the repository is clean."
|
|
||||||
echo "Displaying output from 'git status --porcelain' to help debug"
|
|
||||||
git status --porcelain
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
script_dir=$(dirname "$0")
|
|
||||||
lister_path="$script_dir/lister.py"
|
|
||||||
python_files="$($lister_path -f py)"
|
|
||||||
|
|
||||||
if [ -z "$python_files" ]; then
|
|
||||||
echo "There are no python files to check in the current directory."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
quick=1
|
|
||||||
if [ "$1" == "--find-fixers" ]; then
|
|
||||||
quick=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
fixer_options=""
|
|
||||||
for fixer in $fixers; do
|
|
||||||
fixer_options+="-f $fixer "
|
|
||||||
done
|
|
||||||
|
|
||||||
failed=0
|
|
||||||
# run quick check
|
|
||||||
echo "Running quick Python 3 compatibility test"
|
|
||||||
echo "$python_files" | xargs futurize $fixer_options -j4 -n -w >/dev/null 2>/dev/null
|
|
||||||
if ! git diff --exit-code; then
|
|
||||||
# Clear the output from this one
|
|
||||||
git reset --hard >/dev/null
|
|
||||||
failed=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# run slow check
|
|
||||||
if [ "$failed" = "1" -a "$quick" == "0" ]; then
|
|
||||||
echo "Running each fixer separately to find out which fixers need to be applied"
|
|
||||||
for fixer in $fixers; do
|
|
||||||
echo "Running Python 3 compatibility test $fixer"
|
|
||||||
echo "$python_files" | xargs futurize -f $fixer -j4 -n -w >/dev/null 2>/dev/null
|
|
||||||
if ! git diff --exit-code; then
|
|
||||||
# Clear the output from this one
|
|
||||||
git reset --hard >/dev/null
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The dict fixer tries to add list() even in for loops over an
|
|
||||||
# iterator where it's just counterproductive. To address this, we run
|
|
||||||
# the fixer but check for lines which don't include code that works
|
|
||||||
# with iterators (currently for, join, and from_iterable).
|
|
||||||
fixer="libmodernize.fixes.fix_dict_six"
|
|
||||||
echo "Running python 3 compatability test $fixer"
|
|
||||||
echo "$python_files" | xargs python-modernize -f $fixer -j4 -n -w >/dev/null 2>/dev/null
|
|
||||||
if git --no-pager diff | grep "^+ " | grep -v '[ ]*for' | grep -v [.]join | grep -v from_iterable; then
|
|
||||||
echo
|
|
||||||
echo "Error: the above are changes suggested by python-modernize "
|
|
||||||
echo "to handle the list=>iterator transition in Python 3."
|
|
||||||
echo "Because 'python-modernize -f libmodernize.fixes.fix_dict_six' is spammy "
|
|
||||||
echo "and also changes places where an iterator works fine, this output "
|
|
||||||
echo "does not display the full context; you can find the diff with context by "
|
|
||||||
echo "searching through the (unfortunately very spammy) full output below:"
|
|
||||||
echo
|
|
||||||
git --no-pager diff
|
|
||||||
echo
|
|
||||||
echo "That was a lot of text! Read this output from the top for more readable details."
|
|
||||||
failed=1
|
|
||||||
fi
|
|
||||||
# Clear the output
|
|
||||||
git reset --hard >/dev/null
|
|
||||||
|
|
||||||
if git grep -q '\(^\W*import StringIO\|^\W*from StringIO\)'; then
|
|
||||||
echo "ERROR: StringIO imports not compatible with python 2+3:"
|
|
||||||
git grep '\(^\W*import StringIO\|^\W*from StringIO\)'
|
|
||||||
echo "Please use 'from six.moves import cStringIO as StringIO'"
|
|
||||||
failed=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
if [ "$failed" == "0" ]; then
|
|
||||||
echo "No issues detected!"
|
|
||||||
else
|
|
||||||
echo "Python 3 compatibility error(s) detected! See diffs above for what you need to change."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
|
@ -36,8 +36,6 @@ run ./tools/clean-repo
|
||||||
|
|
||||||
# travis/static-analysis
|
# travis/static-analysis
|
||||||
run ./tools/run-mypy
|
run ./tools/run-mypy
|
||||||
# Not running check-py3 because it demands a clean Git worktree.
|
|
||||||
# run ./tools/check-py3
|
|
||||||
|
|
||||||
# travis/backend
|
# travis/backend
|
||||||
run ./tools/lint --pep8 $FORCEARG
|
run ./tools/lint --pep8 $FORCEARG
|
||||||
|
|
|
@ -2,15 +2,10 @@
|
||||||
set -e
|
set -e
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
# We only need mypy and the python 3 compatibility checkers in this
|
# We only need the mypy checker in this build, so we just install that
|
||||||
# build, so we just install those directly, skipping provision.
|
# directly, skipping provision.
|
||||||
|
|
||||||
if ! pip install --no-deps -r requirements/mypy.txt; then
|
if ! pip install --no-deps -r requirements/mypy.txt; then
|
||||||
echo "\`pip install --no-deps -r requirements/mypy.txt\`: Failure occured while trying to perform dependancy installation, Retrying..."
|
echo "\`pip install --no-deps -r requirements/mypy.txt\`: Failure occured while trying to perform dependancy installation, Retrying..."
|
||||||
pip install --no-deps -r requirements/mypy.txt
|
pip install --no-deps -r requirements/mypy.txt
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! pip install --no-deps -r requirements/py3k.txt; then
|
|
||||||
echo "\`pip install --no-deps -r requirements/py3k.txt\`: Failure occured while trying to perform dependancy installation, Retrying..."
|
|
||||||
pip install --no-deps -r requirements/py3k.txt
|
|
||||||
fi
|
|
||||||
|
|
|
@ -18,8 +18,6 @@ else
|
||||||
fi
|
fi
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
tools/check-py3
|
|
||||||
|
|
||||||
# NB: Everything here should be in `tools/test-all`. If there's a
|
# NB: Everything here should be in `tools/test-all`. If there's a
|
||||||
# reason not to run it there, it should be there as a comment
|
# reason not to run it there, it should be there as a comment
|
||||||
# explaining why.
|
# explaining why.
|
||||||
|
|
Loading…
Reference in New Issue