# HG changeset patch # User Andrey Skvortsov # Date 1528553596 -10800 # Node ID 52630996e51b973c3930a93a5ddf63d2bb55006f # Parent 017ad9cc20b9c23e0d48032570d7460d05309c27 Add command line argument to run linter only on changed files ./tests/tools/check_source.sh --only-changes It's recommended to run check_source.sh automatically on each commit, so the rules are always enforced. Even better is to use docker for that, so the versions of pep8 and pylint are the same as on pipeline server. To do this couple of lines should be added into repository's hgrc file. [----------- cut from .hg/hgrc------------------] [hooks] precommit.linter = ./tests/tools/check_source.sh --only-changes # precommit.linter = docker run -it --volume=$PWD:/beremiz --workdir="/beremiz" --volume=$PWD/../CanFestival-3:/CanFestival-3 --memory=1g --entrypoint=/beremiz/tests/tools/check_source.sh skvorl/beremiz-requirements --only-changes [-----------------------------------------------] diff -r 017ad9cc20b9 -r 52630996e51b tests/tools/check_source.sh --- a/tests/tools/check_source.sh Fri Jun 08 15:10:27 2018 +0300 +++ b/tests/tools/check_source.sh Sat Jun 09 17:13:16 2018 +0300 @@ -35,8 +35,6 @@ compile_checks() { echo "Syntax checking using python ..." - py_files=$(find . -name '*.py') - python --version # remove compiled Python files @@ -93,7 +91,7 @@ ignore=$user_ignore,$default_ignore # $pep8 --ignore $ignore --exclude build ./ - $pep8 --max-line-length 300 --exclude build ./ + $pep8 --max-line-length 300 --exclude build $py_files if [ $? -ne 0 ]; then set_exit_error fi @@ -164,7 +162,7 @@ user_select=$user_select,E402 # E402 module level import not at top of file user_select=$user_select,W503 # W503 line break before binary operator - $pep8 --select $user_select --exclude=build . + $pep8 --select $user_select --exclude=build $py_files if [ $? -ne 0 ]; then set_exit_error fi @@ -187,7 +185,7 @@ echo -n "flake8 version: " flake8 --version - flake8 --max-line-length=300 --exclude=build --builtins="_" ./ + flake8 --max-line-length=300 --exclude=build --builtins="_" $py_files if [ $? -ne 0 ]; then set_exit_error fi @@ -306,17 +304,31 @@ fi # echo $options - find ./ -name '*.py' | grep -v '/build/' | xargs pylint $options - if [ $? -ne 0 ]; then - set_exit_error - fi - - echo "DONE" - echo "" + echo $py_files | xargs pylint $options + if [ $? -ne 0 ]; then + set_exit_error + fi + + echo "DONE" + echo "" +} + + +get_files_to_check() +{ + py_files=$(find . -name '*.py' -not -path '*/build/*') + if [ "$1" = "--only-changes" ]; then + if which hg > /dev/null; then + echo "Only changes will be checked" + echo "" + py_files=$(hg status -m -a -n -I '**.py') + fi + fi } main() { + get_files_to_check $1 compile_checks pep8_checks_default # pep8_checks_selected @@ -325,4 +337,4 @@ exit $exit_code } -main +main $1