aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVratko Polak <vrpolak@cisco.com>2019-03-20 13:23:30 +0100
committerVratko Polak <vrpolak@cisco.com>2019-03-20 13:23:30 +0100
commit6f082130e508e151bb8e92ce459a10b05b3c82b8 (patch)
tree5bfd8b0862a81c0d95fd886116e720000e349739
parent1901d5ad9a903d261f98d5d2423afbba90b89206 (diff)
Add tox checker for lengths of new lines only
- Still non-voting, but useful. Change-Id: Idd6f345f0f14fdbc237ff66f5e010801ea08dc5b Signed-off-by: Vratko Polak <vrpolak@cisco.com>
-rw-r--r--resources/libraries/bash/entry/check/line.sh3
-rw-r--r--resources/libraries/bash/entry/check/new_line.sh51
-rw-r--r--tox.ini25
3 files changed, 67 insertions, 12 deletions
diff --git a/resources/libraries/bash/entry/check/line.sh b/resources/libraries/bash/entry/check/line.sh
index c58c7d0126..932f3cdbe9 100644
--- a/resources/libraries/bash/entry/check/line.sh
+++ b/resources/libraries/bash/entry/check/line.sh
@@ -30,10 +30,11 @@ source "${BASH_FUNCTION_DIR}/common.sh" || {
exit 1
}
-# docs contains too many wide formatted tables.
+# Directory docs contains too many wide formatted tables.
# .txt contains lines with wide URLs.
piped_command='set -exuo pipefail && grep -rn ".\{81\}" "resources/" "tests/"'
piped_command+=' | fgrep -v .svg | fgrep -v .txt | tee "lines.log" | wc -l'
+# TODO: The greps "fail" if no long line remains. Fix that if it ever happens.
lines="$(bash -c "${piped_command}")" || die
if [ "${lines}" != "0" ]; then
# TODO: Decide which text goes to stdout and which to stderr.
diff --git a/resources/libraries/bash/entry/check/new_line.sh b/resources/libraries/bash/entry/check/new_line.sh
new file mode 100644
index 0000000000..49c3d65815
--- /dev/null
+++ b/resources/libraries/bash/entry/check/new_line.sh
@@ -0,0 +1,51 @@
+# Copyright (c) 2019 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -exuo pipefail
+
+# This file should be executed from tox, as the assumend working directory
+# is different from where this file is located.
+# This file does not have executable flag nor shebang,
+# to dissuade non-tox callers.
+
+# This script runs a grep-based command and fails if it detects any lines
+# edited or added since HEAD~ and longer than 80 characters.
+# The grep output stored to new_lines.log (overwriting).
+
+# See lines.log to locate where the lines are.
+
+# "set -eu" handles failures from the following two lines.
+BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
+BASH_FUNCTION_DIR="$(readlink -e "${BASH_CHECKS_DIR}/../../function")"
+source "${BASH_FUNCTION_DIR}/common.sh" || {
+ echo "Source failed." >&2
+ exit 1
+}
+
+# Greps do "fail" on zero line output, we need to ignore that in the final grep.
+piped_command="set -exuo pipefail && git diff -U0 HEAD~ | grep '^\+' | "
+piped_command+="cut -c2- | grep -v '^\+\+ ' | { grep '.\{81\}' || true; } | "
+piped_command+="tee 'new_lines.log' | wc -l"
+lines="$(bash -c "${piped_command}")" || die
+if [ "${lines}" != "0" ]; then
+ # TODO: Decide which text goes to stdout and which to stderr.
+ warn "Long lines detected: ${lines}"
+ # TODO: Disable when output size does more harm than good.
+ cat "new_lines.log" >&2
+ warn
+ warn "New line length checker: FAIL"
+ exit 1
+fi
+
+warn
+warn "New line length checker: PASS"
diff --git a/tox.ini b/tox.ini
index 0fd8645328..6413c95307 100644
--- a/tox.ini
+++ b/tox.ini
@@ -25,12 +25,13 @@
# will execute only checks defined in "pylint" tox environment.
[tox]
-envlist = linelength, autogen, pylint
+envlist = new_line_length, line_length, autogen, pylint
# The following is needed as tox requires setup.py by default.
skipsdist = true
+# Just a shorthand to avoid long lines.
+checker_dir = ./resources/libraries/bash/entry/check
-# TODO: Tox prints various warnings.
-# Figure out what they are about and fix them.
+# TODO: Tox prints various warnings. Figure them out and fix them.
[testenv:pylint]
deps =
@@ -39,24 +40,26 @@ deps =
whitelist_externals = /bin/bash
setenv = PYTHONPATH = {toxinidir}
# Run pylint, but hide its return value until python warnings are cleared.
-commands = bash -c "bash resources/libraries/bash/entry/check/pylint.sh || true"
+commands = bash -c "bash {[tox]checker_dir}/pylint.sh || true"
# TODO: See FIXME in https://gerrit.fd.io/r/16423
-[testenv:linelength]
+[testenv:line_length]
whitelist_externals = /bin/bash
# Fix all transgressions and remove the " || true" workaround.
-commands = bash -c "bash resources/libraries/bash/entry/check/line.sh || true"
+commands = bash -c "bash {[tox]checker_dir}/line.sh || true"
-# It would be possible to add a check which fails
-# if number of long lines increases (from parent commit value),
-# and have it voting.
-# But that would basically prevent us from adding new suites righ now. :(
+[testenv:new_line_length]
+whitelist_externals = /bin/bash
+# Adding .svg, big .rst tables, .yaml and similar still requires long lines.
+# As current implementation is too dumb to filter those out,
+# the checker has to remain non-voting.
+commands = bash -c "bash {[tox]checker_dir}/new_line.sh || true"
[testenv:autogen]
whitelist_externals = /bin/bash
setenv = PYTHONPATH = {toxinidir}
-commands = bash resources/libraries/bash/entry/check/autogen.sh
+commands = bash {[tox]checker_dir}/autogen.sh
# TODO: Migrate current docs check here.
# TODO: Create license checker.
'n403' href='#n403'>403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446