diff options
Diffstat (limited to 'test/lint')
-rw-r--r-- | test/lint/README.md | 2 | ||||
-rwxr-xr-x | test/lint/lint-all.py | 23 | ||||
-rwxr-xr-x | test/lint/lint-all.sh | 30 | ||||
-rwxr-xr-x | test/lint/lint-assertions.py | 12 | ||||
-rwxr-xr-x | test/lint/lint-circular-dependencies.py | 16 | ||||
-rwxr-xr-x | test/lint/lint-format-strings.py | 2 | ||||
-rwxr-xr-x | test/lint/lint-includes.py | 5 |
7 files changed, 38 insertions, 52 deletions
diff --git a/test/lint/README.md b/test/lint/README.md index f4165f908e..1f683c10b3 100644 --- a/test/lint/README.md +++ b/test/lint/README.md @@ -39,6 +39,6 @@ To do so, add the upstream repository as remote: git remote add --fetch secp256k1 https://github.com/bitcoin-core/secp256k1.git ``` -lint-all.sh +lint-all.py =========== Calls other scripts with the `lint-` prefix. diff --git a/test/lint/lint-all.py b/test/lint/lint-all.py new file mode 100755 index 0000000000..c280ba2db2 --- /dev/null +++ b/test/lint/lint-all.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2017-2022 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 test/lint/lint-* files, and fails if any exit +# with a non-zero status code. + +from glob import glob +from pathlib import Path +from subprocess import run + +exit_code = 0 +mod_path = Path(__file__).parent +for lint in glob(f"{mod_path}/lint-*"): + if lint != __file__: + result = run([lint]) + if result.returncode != 0: + print(f"^---- failure generated from {lint.split('/')[-1]}") + exit_code |= result.returncode + +exit(exit_code) diff --git a/test/lint/lint-all.sh b/test/lint/lint-all.sh deleted file mode 100755 index fa37fa51c6..0000000000 --- a/test/lint/lint-all.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright (c) 2017-2019 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-* files, and fails if any exit -# with a non-zero status code. - -# This script is intentionally locale dependent by not setting "export LC_ALL=C" -# in order to allow for the executed lint scripts to opt in or opt out of locale -# dependence themselves. - -set -u - -SCRIPTDIR=$(dirname "${BASH_SOURCE[0]}") -LINTALL=$(basename "${BASH_SOURCE[0]}") - -EXIT_CODE=0 - -for f in "${SCRIPTDIR}"/lint-*; do - if [ "$(basename "$f")" != "$LINTALL" ]; then - if ! "$f"; then - echo "^---- failure generated from $f" - EXIT_CODE=1 - fi - fi -done - -exit ${EXIT_CODE} diff --git a/test/lint/lint-assertions.py b/test/lint/lint-assertions.py index a8d2b3927c..195ff33d11 100755 --- a/test/lint/lint-assertions.py +++ b/test/lint/lint-assertions.py @@ -30,20 +30,20 @@ def main(): r"[^_]assert\(.*(\+\+|\-\-|[^=!<>]=[^=!<>]).*\);", "--", "*.cpp", - "*.h" + "*.h", ], "Assertions should not have side effects:") - # Macro CHECK_NONFATAL(condition) should be used instead of assert for RPC code, where it - # is undesirable to crash the whole program. See: src/util/check.h + # Aborting the whole process is undesirable for RPC code. So nonfatal + # checks should be used over assert. See: src/util/check.h # src/rpc/server.cpp is excluded from this check since it's mostly meta-code. exit_code |= git_grep([ "-nE", - r"\<(A|a)ssert *\(.*\);", + r"\<(A|a)ss(ume|ert) *\(.*\);", "--", "src/rpc/", "src/wallet/rpc*", - ":(exclude)src/rpc/server.cpp" - ], "CHECK_NONFATAL(condition) should be used instead of assert for RPC code.") + ":(exclude)src/rpc/server.cpp", + ], "CHECK_NONFATAL(condition) or NONFATAL_UNREACHABLE should be used instead of assert for RPC code.") sys.exit(exit_code) diff --git a/test/lint/lint-circular-dependencies.py b/test/lint/lint-circular-dependencies.py index e04909c0a5..7ca2ec994b 100755 --- a/test/lint/lint-circular-dependencies.py +++ b/test/lint/lint-circular-dependencies.py @@ -6,7 +6,6 @@ # # Check for circular dependencies -import glob import os import re import subprocess @@ -32,17 +31,14 @@ CODE_DIR = "src" def main(): circular_dependencies = [] exit_code = 0 - os.chdir( - CODE_DIR - ) # We change dir before globbing since glob.glob's root_dir option is only available in Python 3.10 - # Using glob.glob since subprocess.run's globbing won't work without shell=True - files = [] - for path in ["*", "*/*", "*/*/*"]: - for extension in ["h", "cpp"]: - files.extend(glob.glob(f"{path}.{extension}")) + os.chdir(CODE_DIR) + files = subprocess.check_output( + ['git', 'ls-files', '--', '*.h', '*.cpp'], + universal_newlines=True, + ).splitlines() - command = ["python3", "../contrib/devtools/circular-dependencies.py", *files] + command = [sys.executable, "../contrib/devtools/circular-dependencies.py", *files] dependencies_output = subprocess.run( command, stdout=subprocess.PIPE, diff --git a/test/lint/lint-format-strings.py b/test/lint/lint-format-strings.py index 5a36da11fd..28e7b1e4ff 100755 --- a/test/lint/lint-format-strings.py +++ b/test/lint/lint-format-strings.py @@ -36,7 +36,7 @@ RUN_LINT_FILE = 'test/lint/run-lint-format-strings.py' def check_doctest(): command = [ - 'python3', + sys.executable, '-m', 'doctest', RUN_LINT_FILE, diff --git a/test/lint/lint-includes.py b/test/lint/lint-includes.py index b29c7f8b4d..ae62994642 100755 --- a/test/lint/lint-includes.py +++ b/test/lint/lint-includes.py @@ -21,10 +21,7 @@ EXCLUDED_DIRS = ["src/leveldb/", "src/minisketch/", "src/univalue/"] -EXPECTED_BOOST_INCLUDES = ["boost/algorithm/string.hpp", - "boost/algorithm/string/classification.hpp", - "boost/algorithm/string/replace.hpp", - "boost/algorithm/string/split.hpp", +EXPECTED_BOOST_INCLUDES = ["boost/algorithm/string/replace.hpp", "boost/date_time/posix_time/posix_time.hpp", "boost/multi_index/hashed_index.hpp", "boost/multi_index/ordered_index.hpp", |