tox: make it possible to run pep8 on current patch only

This makes tox use a simple wrapper around flake8 like
Nova, which can be told to restrict the check to only
files changed in the current command. This can be invoked
in a simple manner with 'tox -epep8 -- -HEAD'. Since most
commits only touch a handful of files, this will usually
be far faster than checking all source files.

To check an entire branch for bisectability it can be
automated via

  git rebase -i master -x 'tox -epep8 -- -HEAD'

Change-Id: I75b1cfe3198b1217f8b25877714a4af47ae7069f
This commit is contained in:
Zhenguo Niu 2015-12-22 15:46:46 +08:00
parent 0371f6678d
commit 29b37065d7
2 changed files with 21 additions and 1 deletions

20
tools/flake8wrap.sh Executable file
View File

@ -0,0 +1,20 @@
#!/bin/bash
#
# A simple wrapper around flake8 which makes it possible
# to ask it to only verify files changed in the current
# git HEAD patch.
#
# Intended to be invoked via tox:
#
# tox -epep8 -- -HEAD
#
if test "x$1" = "x-HEAD" ; then
shift
files=$(git diff --name-only HEAD~1 | tr '\n' ' ')
echo "Running flake8 on ${files}"
diff -u --from-file /dev/null ${files} | flake8 --diff "$@"
else
echo "Running flake8 on all files"
exec flake8 "$@"
fi

View File

@ -25,7 +25,7 @@ commands = {toxinidir}/tools/states_to_dot.py -f {toxinidir}/doc/source/images/s
[testenv:pep8] [testenv:pep8]
whitelist_externals = bash whitelist_externals = bash
commands = commands =
flake8 {posargs} bash tools/flake8wrap.sh {posargs}
# Run bashate during pep8 runs to ensure violations are caught by # Run bashate during pep8 runs to ensure violations are caught by
# the check and gate queues. # the check and gate queues.
{toxinidir}/tools/run_bashate.sh {toxinidir}/devstack {toxinidir}/tools/run_bashate.sh {toxinidir}/devstack