2018-06-24 16:41:58 +02:00
|
|
|
#!/usr/bin/env bash
|
2018-04-11 16:01:39 +02:00
|
|
|
#
|
2023-08-16 19:27:31 +02:00
|
|
|
# Copyright (c) 2018-2020 The Bitcoin Core developers
|
2018-04-11 16:01:39 +02:00
|
|
|
# Distributed under the MIT software license, see the accompanying
|
|
|
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#
|
|
|
|
# Check for shellcheck warnings in shell scripts.
|
|
|
|
|
2018-08-02 15:08:38 +02:00
|
|
|
export LC_ALL=C
|
|
|
|
|
2018-04-11 16:01:39 +02:00
|
|
|
# Disabled warnings:
|
2019-01-16 11:57:20 +01:00
|
|
|
disabled=(
|
|
|
|
SC2046 # Quote this to prevent word splitting.
|
|
|
|
SC2086 # Double quote to prevent globbing and word splitting.
|
|
|
|
SC2162 # read without -r will mangle backslashes.
|
|
|
|
)
|
2021-08-25 17:01:44 +02:00
|
|
|
|
|
|
|
EXIT_CODE=0
|
|
|
|
|
|
|
|
if ! command -v shellcheck > /dev/null; then
|
|
|
|
echo "Skipping shell linting since shellcheck is not installed."
|
|
|
|
exit $EXIT_CODE
|
|
|
|
fi
|
|
|
|
|
2021-10-10 23:41:20 +02:00
|
|
|
if ! command -v gawk > /dev/null; then
|
|
|
|
echo "Skipping shell linting since gawk is not installed."
|
|
|
|
exit $EXIT_CODE
|
|
|
|
fi
|
|
|
|
|
2020-05-06 06:51:18 +02:00
|
|
|
SHELLCHECK_CMD=(shellcheck --external-sources --check-sourced)
|
2021-08-25 17:01:44 +02:00
|
|
|
EXCLUDE="--exclude=$(IFS=','; echo "${disabled[*]}")"
|
2021-08-24 17:38:35 +02:00
|
|
|
SOURCED_FILES=$(git ls-files | xargs gawk '/^# shellcheck shell=/ {print FILENAME} {nextfile}') # Check shellcheck directive used for sourced files
|
2021-07-20 20:18:43 +02:00
|
|
|
if ! "${SHELLCHECK_CMD[@]}" "$EXCLUDE" $SOURCED_FILES $(git ls-files -- '*.sh' | grep -vE 'src/(dashbls|immer|leveldb|secp256k1|minisketch|univalue)/'); then
|
2021-08-25 17:01:44 +02:00
|
|
|
EXIT_CODE=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit $EXIT_CODE
|