]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add ability to run pylint check on modified files only
authorarmando-migliaccio <armamig@gmail.com>
Thu, 26 Feb 2015 05:53:27 +0000 (21:53 -0800)
committerarmando-migliaccio <armamig@gmail.com>
Thu, 5 Mar 2015 17:24:05 +0000 (09:24 -0800)
Change c0aa0b fused pylint with the checks done with the pep8 testenv.
This has the drawback of increasing the execution time of the command
'tox -epep8' fourfold.

This change introduces the ability to execute the pylint check on just
the list of python files affected by a specific patch. For instance,
this can be done with the following command:

   tox -epep8 HEAD~1

A kind reminder is added, so that folks who end up noticing the spike of
time execution when they run tox -epep8 without posargs, can learn how
they can get their precious minutes back.

Change-Id: Ie2a2b3a0171908d8d8aa8713baaa875adccb7efe

tools/coding-checks.sh [new file with mode: 0644]
tox.ini

diff --git a/tools/coding-checks.sh b/tools/coding-checks.sh
new file mode 100644 (file)
index 0000000..287b205
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+set -eu
+
+usage () {
+  echo "Usage: $0 [OPTION]..."
+  echo "Run Neutron's coding check(s)"
+  echo ""
+  echo "  -Y, --pylint [<basecommit>] Run pylint check on the entire neutron module or just files changed in basecommit (e.g. HEAD~1)"
+  echo "  -h, --help                  Print this usage message"
+  echo
+  exit 0
+}
+
+process_options () {
+  i=1
+  while [ $i -le $# ]; do
+    eval opt=\$$i
+    case $opt in
+      -h|--help) usage;;
+      -Y|--pylint) pylint=1;;
+      *) scriptargs="$scriptargs $opt"
+    esac
+    i=$((i+1))
+  done
+}
+
+run_pylint () {
+    local target="${scriptargs:-all}"
+
+    if [ "$target" = "all" ]; then
+        files="neutron"
+    else
+      case "$target" in
+        *HEAD~[0-9]*) files=$(git diff --diff-filter=AM --name-only $target -- "*.py");;
+        *) echo "$target is an unrecognized basecommit"; exit 1;;
+      esac
+    fi
+
+    echo "Running pylint..."
+    echo "You can speed this up by running it on 'HEAD~[0-9]' (e.g. HEAD~1, this change only)..."
+    if [ -n "${files}" ]; then
+        pylint --rcfile=.pylintrc --output-format=colorized ${files}
+    else
+        echo "No python changes in this commit, pylint check not required."
+        exit 0
+    fi
+}
+
+scriptargs=
+pylint=1
+
+process_options $@
+
+if [ $pylint -eq 1 ]; then
+    run_pylint
+    exit 0
+fi
diff --git a/tox.ini b/tox.ini
index 54d916123105e3d592194608e4f3e8badd109c5d..3e03249da2cc9b88dcf4337e02cb822cf9773d83 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -56,9 +56,10 @@ deps =
 commands=
   # If it is easier to add a check via a shell script, consider adding it in this file
   sh ./tools/misc-sanity-checks.sh
+  # Checks for coding and style guidelines
   flake8
+  sh ./tools/coding-checks.sh --pylint '{posargs}'
   neutron-db-manage check_migration
-  pylint --rcfile=.pylintrc --output-format=colorized {posargs:neutron}
 whitelist_externals = sh
 
 [testenv:cover]