Provide a quick way to run flake8
"run_tests.sh -p" always checks every file for errors even though you have probably only changed a handful. This patch adds "run_tests.sh -8" which only checks the files that were modified in the HEAD commit or in the current working tree. It is borrowed from the recent nova commit b011325cc6. The related ML post is: http://lists.openstack.org/pipermail/openstack-dev/2014-August/043346.html Change-Id: Ieeabf1b79a0790af8bde3144dca59b4245a0b79a
This commit is contained in:
parent
5d24065099
commit
e33a07bc44
57
run_tests.sh
57
run_tests.sh
@ -14,6 +14,8 @@ function usage {
|
|||||||
echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
|
echo " -f, --force Force a clean re-build of the virtual environment. Useful when dependencies have been added."
|
||||||
echo " -u, --update Update the virtual environment with any newer package versions"
|
echo " -u, --update Update the virtual environment with any newer package versions"
|
||||||
echo " -p, --pep8 Just run PEP8 and HACKING compliance check"
|
echo " -p, --pep8 Just run PEP8 and HACKING compliance check"
|
||||||
|
echo " -8, --pep8-only-changed [<basecommit>]"
|
||||||
|
echo " Just run PEP8 and HACKING compliance check on files changed since HEAD~1 (or <basecommit>)"
|
||||||
echo " -P, --no-pep8 Don't run static code checks"
|
echo " -P, --no-pep8 Don't run static code checks"
|
||||||
echo " -c, --coverage Generate coverage report"
|
echo " -c, --coverage Generate coverage report"
|
||||||
echo " -d, --debug Run tests with testtools instead of testr. This allows you to use the debugger."
|
echo " -d, --debug Run tests with testtools instead of testr. This allows you to use the debugger."
|
||||||
@ -44,6 +46,7 @@ function process_options {
|
|||||||
-f|--force) force=1;;
|
-f|--force) force=1;;
|
||||||
-u|--update) update=1;;
|
-u|--update) update=1;;
|
||||||
-p|--pep8) just_pep8=1;;
|
-p|--pep8) just_pep8=1;;
|
||||||
|
-8|--pep8-only-changed) just_pep8_changed=1;;
|
||||||
-P|--no-pep8) no_pep8=1;;
|
-P|--no-pep8) no_pep8=1;;
|
||||||
-c|--coverage) coverage=1;;
|
-c|--coverage) coverage=1;;
|
||||||
-d|--debug) debug=1;;
|
-d|--debug) debug=1;;
|
||||||
@ -59,8 +62,8 @@ function process_options {
|
|||||||
(( i++ ))
|
(( i++ ))
|
||||||
tools_path=${!i}
|
tools_path=${!i}
|
||||||
;;
|
;;
|
||||||
-*) testropts="$testropts ${!i}";;
|
-*) testopts="$testopts ${!i}";;
|
||||||
*) testrargs="$testrargs ${!i}"
|
*) testargs="$testargs ${!i}"
|
||||||
esac
|
esac
|
||||||
(( i++ ))
|
(( i++ ))
|
||||||
done
|
done
|
||||||
@ -75,10 +78,11 @@ never_venv=0
|
|||||||
force=0
|
force=0
|
||||||
no_site_packages=0
|
no_site_packages=0
|
||||||
installvenvopts=
|
installvenvopts=
|
||||||
testrargs=
|
testargs=
|
||||||
testropts=
|
testopts=
|
||||||
wrapper=""
|
wrapper=""
|
||||||
just_pep8=0
|
just_pep8=0
|
||||||
|
just_pep8_changed=0
|
||||||
no_pep8=0
|
no_pep8=0
|
||||||
coverage=0
|
coverage=0
|
||||||
debug=0
|
debug=0
|
||||||
@ -107,12 +111,12 @@ function run_tests {
|
|||||||
${wrapper} find . -type f -name "*.pyc" -delete
|
${wrapper} find . -type f -name "*.pyc" -delete
|
||||||
|
|
||||||
if [ $debug -eq 1 ]; then
|
if [ $debug -eq 1 ]; then
|
||||||
if [ "$testropts" = "" ] && [ "$testrargs" = "" ]; then
|
if [ "$testopts" = "" ] && [ "$testargs" = "" ]; then
|
||||||
# Default to running all tests if specific test is not
|
# Default to running all tests if specific test is not
|
||||||
# provided.
|
# provided.
|
||||||
testrargs="discover ./neutron/tests"
|
testargs="discover ./neutron/tests"
|
||||||
fi
|
fi
|
||||||
${wrapper} python -m testtools.run $testropts $testrargs
|
${wrapper} python -m testtools.run $testopts $testargs
|
||||||
|
|
||||||
# Short circuit because all of the testr and coverage stuff
|
# Short circuit because all of the testr and coverage stuff
|
||||||
# below does not make sense when running testtools.run for
|
# below does not make sense when running testtools.run for
|
||||||
@ -128,9 +132,9 @@ function run_tests {
|
|||||||
|
|
||||||
# Just run the test suites in current environment
|
# Just run the test suites in current environment
|
||||||
set +e
|
set +e
|
||||||
testrargs=`echo "$testrargs" | sed -e's/^\s*\(.*\)\s*$/\1/'`
|
testargs=`echo "$testargs" | sed -e's/^\s*\(.*\)\s*$/\1/'`
|
||||||
TESTRTESTS="$TESTRTESTS --testr-args='--subunit $testropts $testrargs'"
|
TESTRTESTS="$TESTRTESTS --testr-args='--subunit $testopts $testargs'"
|
||||||
OS_TEST_PATH=`echo $testrargs|grep -o 'neutron\.tests[^[:space:]:]*\+'|tr . /`
|
OS_TEST_PATH=`echo $testargs|grep -o 'neutron\.tests[^[:space:]:]*\+'|tr . /`
|
||||||
if [ -d "$OS_TEST_PATH" ]; then
|
if [ -d "$OS_TEST_PATH" ]; then
|
||||||
wrapper="OS_TEST_PATH=$OS_TEST_PATH $wrapper"
|
wrapper="OS_TEST_PATH=$OS_TEST_PATH $wrapper"
|
||||||
elif [ -d "$(dirname $OS_TEST_PATH)" ]; then
|
elif [ -d "$(dirname $OS_TEST_PATH)" ]; then
|
||||||
@ -160,12 +164,32 @@ function copy_subunit_log {
|
|||||||
cp $LOGNAME subunit.log
|
cp $LOGNAME subunit.log
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function warn_on_flake8_without_venv {
|
||||||
|
if [ $never_venv -eq 1 ]; then
|
||||||
|
echo "**WARNING**:"
|
||||||
|
echo "Running flake8 without virtual env may miss OpenStack HACKING detection"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function run_pep8 {
|
function run_pep8 {
|
||||||
echo "Running flake8 ..."
|
echo "Running flake8 ..."
|
||||||
|
warn_on_flake8_without_venv
|
||||||
${wrapper} flake8
|
${wrapper} flake8
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function run_pep8_changed {
|
||||||
|
# NOTE(gilliard) We want use flake8 to check the entirety of every file that has
|
||||||
|
# a change in it. Unfortunately the --filenames argument to flake8 only accepts
|
||||||
|
# file *names* and there are no files named (eg) "nova/compute/manager.py". The
|
||||||
|
# --diff argument behaves surprisingly as well, because although you feed it a
|
||||||
|
# diff, it actually checks the file on disk anyway.
|
||||||
|
local target=${testargs:-HEAD~1}
|
||||||
|
local files=$(git diff --name-only $target | tr '\n' ' ')
|
||||||
|
echo "Running flake8 on ${files}"
|
||||||
|
warn_on_flake8_without_venv
|
||||||
|
diff -u --from-file /dev/null ${files} | ${wrapper} flake8 --diff
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TESTRTESTS="python -m neutron.openstack.common.lockutils python setup.py testr"
|
TESTRTESTS="python -m neutron.openstack.common.lockutils python setup.py testr"
|
||||||
|
|
||||||
@ -209,6 +233,11 @@ if [ $just_pep8 -eq 1 ]; then
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $just_pep8_changed -eq 1 ]; then
|
||||||
|
run_pep8_changed
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
if [ $recreate_db -eq 1 ]; then
|
if [ $recreate_db -eq 1 ]; then
|
||||||
rm -f tests.sqlite
|
rm -f tests.sqlite
|
||||||
fi
|
fi
|
||||||
@ -217,9 +246,9 @@ run_tests
|
|||||||
|
|
||||||
# NOTE(sirp): we only want to run pep8 when we're running the full-test suite,
|
# NOTE(sirp): we only want to run pep8 when we're running the full-test suite,
|
||||||
# not when we're running tests individually. To handle this, we need to
|
# not when we're running tests individually. To handle this, we need to
|
||||||
# distinguish between options (testropts), which begin with a '-', and
|
# distinguish between options (testopts), which begin with a '-', and
|
||||||
# arguments (testrargs).
|
# arguments (testargs).
|
||||||
if [ -z "$testrargs" ]; then
|
if [ -z "$testargs" ]; then
|
||||||
if [ $no_pep8 -eq 0 ]; then
|
if [ $no_pep8 -eq 0 ]; then
|
||||||
run_pep8
|
run_pep8
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user