From dd365612fdd14e4dadc731e1b2f5d8564b9f23f1 Mon Sep 17 00:00:00 2001 From: Evan Klitzke Date: Mon, 7 Aug 2017 14:24:17 -0700 Subject: [PATCH 1/2] Add a lint check for trailing whitespace. This adds a new CHECK_DOC check that looks for newly introduced trailing whitespace. Existing trailing whitespace (of which there is plenty!) will not trigger an error. This is written in a generic way so that new lint-*.sh scripts can be added to contrib/devtools/, as I'd like to contribute additional lint checks in the future. --- .travis.yml | 1 + contrib/devtools/lint-all.sh | 22 ++++++++++++++ contrib/devtools/lint-whitespace.sh | 47 +++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100755 contrib/devtools/lint-all.sh create mode 100755 contrib/devtools/lint-whitespace.sh diff --git a/.travis.yml b/.travis.yml index 4fa659472ac81..0de7ca6f7565f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -49,6 +49,7 @@ before_script: - if [ "$CHECK_DOC" = 1 -a "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then contrib/devtools/commit-script-check.sh $TRAVIS_COMMIT_RANGE; fi - if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-doc.py; fi - if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/check-rpc-mappings.py .; fi + - if [ "$CHECK_DOC" = 1 ]; then contrib/devtools/lint-all.sh; fi - unset CC; unset CXX - mkdir -p depends/SDKs depends/sdk-sources - if [ -n "$OSX_SDK" -a ! -f depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz ]; then curl --location --fail $SDK_URL/MacOSX${OSX_SDK}.sdk.tar.gz -o depends/sdk-sources/MacOSX${OSX_SDK}.sdk.tar.gz; fi diff --git a/contrib/devtools/lint-all.sh b/contrib/devtools/lint-all.sh new file mode 100755 index 0000000000000..b6d86959c669c --- /dev/null +++ b/contrib/devtools/lint-all.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# This script runs all contrib/devtools/lint-*.sh files, and fails if any exit +# with a non-zero status code. + +set -u + +SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") +LINTALL=$(basename "${BASH_SOURCE[0]}") + +for f in "${SCRIPTDIR}"/lint-*.sh; do + if [ "$(basename "$f")" != "$LINTALL" ]; then + if ! "$f"; then + echo "^---- failure generated from $f" + exit 1 + fi + fi +done diff --git a/contrib/devtools/lint-whitespace.sh b/contrib/devtools/lint-whitespace.sh new file mode 100755 index 0000000000000..59e5c92997734 --- /dev/null +++ b/contrib/devtools/lint-whitespace.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# +# Copyright (c) 2017 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +# +# Check for new lines in diff that introduce trailing whitespace. + +# We can't run this check unless we know the commit range for the PR. +if [ -z "${TRAVIS_COMMIT_RANGE}" ]; then + exit 0 +fi + +showdiff() { + if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" --; then + echo "Failed to get a diff" + exit 1 + fi +} + +# Do a first pass, and if no trailing whitespace was found then exit early. +if ! showdiff | grep -E -q '^\+.*\s+$'; then + exit +fi + +echo "This diff appears to have added new lines with trailing whitespace." +echo "The following changes were suspected:" + +FILENAME="" +SEEN=0 + +while read -r line; do + if [[ "$line" =~ ^diff ]]; then + FILENAME="$line" + SEEN=0 + else + if [ "$SEEN" -eq 0 ]; then + # The first time a file is seen with trailing whitespace, we print the + # filename (preceded by a newline). + echo + echo "$FILENAME" + SEEN=1 + fi + echo "$line" + fi +done < <(showdiff | grep -E '^(diff --git |\+.*\s+$)') +exit 1 From 1f379b1f062bd3ee67a75fe2eb14ad8783f283a5 Mon Sep 17 00:00:00 2001 From: MeshCollider Date: Mon, 11 Sep 2017 19:38:06 +1200 Subject: [PATCH 2/2] Add tab char lint check and exclude imported dependencies --- contrib/devtools/lint-whitespace.sh | 91 +++++++++++++++++++++-------- 1 file changed, 66 insertions(+), 25 deletions(-) diff --git a/contrib/devtools/lint-whitespace.sh b/contrib/devtools/lint-whitespace.sh index 59e5c92997734..6150dd3f646bf 100755 --- a/contrib/devtools/lint-whitespace.sh +++ b/contrib/devtools/lint-whitespace.sh @@ -8,40 +8,81 @@ # We can't run this check unless we know the commit range for the PR. if [ -z "${TRAVIS_COMMIT_RANGE}" ]; then - exit 0 + echo "Cannot run lint-whitespace.sh without commit range. To run locally, use:" + echo "TRAVIS_COMMIT_RANGE='' .lint-whitespace.sh" + echo "For example:" + echo "TRAVIS_COMMIT_RANGE='47ba2c3...ee50c9e' .lint-whitespace.sh" + exit 1 fi showdiff() { - if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" --; then + if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" -- "." ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/"; then echo "Failed to get a diff" exit 1 fi } -# Do a first pass, and if no trailing whitespace was found then exit early. -if ! showdiff | grep -E -q '^\+.*\s+$'; then - exit -fi +showcodediff() { + if ! git diff -U0 "${TRAVIS_COMMIT_RANGE}" -- *.cpp *.h *.md *.py *.sh ":(exclude)src/leveldb/" ":(exclude)src/secp256k1/" ":(exclude)src/univalue/"; then + echo "Failed to get a diff" + exit 1 + fi +} -echo "This diff appears to have added new lines with trailing whitespace." -echo "The following changes were suspected:" +RET=0 -FILENAME="" -SEEN=0 +# Check if trailing whitespace was found in the diff. +if showdiff | grep -E -q '^\+.*\s+$'; then + echo "This diff appears to have added new lines with trailing whitespace." + echo "The following changes were suspected:" + FILENAME="" + SEEN=0 + while read -r line; do + if [[ "$line" =~ ^diff ]]; then + FILENAME="$line" + SEEN=0 + elif [[ "$line" =~ ^@@ ]]; then + LINENUMBER="$line" + else + if [ "$SEEN" -eq 0 ]; then + # The first time a file is seen with trailing whitespace, we print the + # filename (preceded by a newline). + echo + echo "$FILENAME" + echo "$LINENUMBER" + SEEN=1 + fi + echo "$line" + fi + done < <(showdiff | grep -E '^(diff --git |@@|\+.*\s+$)') + RET=1 +fi -while read -r line; do - if [[ "$line" =~ ^diff ]]; then - FILENAME="$line" - SEEN=0 - else - if [ "$SEEN" -eq 0 ]; then - # The first time a file is seen with trailing whitespace, we print the - # filename (preceded by a newline). - echo - echo "$FILENAME" - SEEN=1 +# Check if tab characters were found in the diff. +if showcodediff | grep -P -q '^\+.*\t'; then + echo "This diff appears to have added new lines with tab characters instead of spaces." + echo "The following changes were suspected:" + FILENAME="" + SEEN=0 + while read -r line; do + if [[ "$line" =~ ^diff ]]; then + FILENAME="$line" + SEEN=0 + elif [[ "$line" =~ ^@@ ]]; then + LINENUMBER="$line" + else + if [ "$SEEN" -eq 0 ]; then + # The first time a file is seen with a tab character, we print the + # filename (preceded by a newline). + echo + echo "$FILENAME" + echo "$LINENUMBER" + SEEN=1 + fi + echo "$line" fi - echo "$line" - fi -done < <(showdiff | grep -E '^(diff --git |\+.*\s+$)') -exit 1 + done < <(showcodediff | grep -P '^(diff --git |@@|\+.*\t)') + RET=1 +fi + +exit $RET