From 41cd67dc344a6122ff9dcac09541839c673e941b Mon Sep 17 00:00:00 2001 From: Riyyi Date: Thu, 18 Aug 2022 20:18:25 +0200 Subject: [PATCH] Meta: Allow pre-commit hooks to be run from parent project --- script/lint-ci.sh | 30 +++++++++++++++++++----------- script/lint-clang-format.sh | 12 ++++++++---- script/lint-shell-script.sh | 12 ++++++++---- script/pre-commit.sh | 8 +------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/script/lint-ci.sh b/script/lint-ci.sh index 2cc2e9f..73b6aec 100755 --- a/script/lint-ci.sh +++ b/script/lint-ci.sh @@ -5,9 +5,17 @@ # ------------------------------------------ -# Get the full path to this script while handling spaces and symlinks correctly -scriptPath="$(cd -P -- "$(dirname -- "$0")" && pwd -P)" -cd "$scriptPath/.." || exit 1 +b="$(tput bold)" +red="$(tput setf 4)" +n="$(tput sgr0)" + +if [ ! -d ".git" ]; then + echo "${b}${red}Error:${n} please run this script from the project root" >&2 + exit 1 +fi + +# Get the path from the project root to the script +subDir="$(dirname -- "$0")" # Get all files staged for commit files="$(git --no-pager diff --cached --name-only)" @@ -23,21 +31,21 @@ lint-shell-script.sh " for linter in $linters; do - echo "Running script/$linter" - if "script/$linter" "$files"; then - echo "[${green}PASS${nc}]: script/$linter" + echo "Running $subDir/$linter" + if "$subDir/$linter" "$files"; then + echo "[${green}PASS${nc}]: $subDir/$linter" else - echo "[${red}FAIL${nc}]: script/$linter" + echo "[${red}FAIL${nc}]: $subDir/$linter" failures=$(( failures + 1 )) fi done -echo "Running script/lint-clang-format.sh" +echo "Running $subDir/lint-clang-format.sh" # shellcheck disable=SC2086 -if script/lint-clang-format.sh "$files" && git diff --exit-code $files; then - echo "[${green}PASS${nc}]: script/lint-clang-format.sh" +if "$subDir/lint-clang-format.sh" "$files" && git diff --exit-code $files; then + echo "[${green}PASS${nc}]: $subDir/lint-clang-format.sh" else - echo "[${red}FAIL${nc}]: script/lint-clang-format.sh" + echo "[${red}FAIL${nc}]: $subDir/lint-clang-format.sh" failures=$(( failures + 1 )) fi diff --git a/script/lint-clang-format.sh b/script/lint-clang-format.sh index 8969fc9..b206900 100755 --- a/script/lint-clang-format.sh +++ b/script/lint-clang-format.sh @@ -5,9 +5,14 @@ # ------------------------------------------ -# Get the full path to this script while handling spaces and symlinks correctly -scriptPath="$(cd -P -- "$(dirname -- "$0")" && pwd -P)" -cd "$scriptPath/.." || exit 1 +b="$(tput bold)" +red="$(tput setf 4)" +n="$(tput sgr0)" + +if [ ! -d ".git" ]; then + echo "${b}${red}Error:${n} please run this script from the project root" >&2 + exit 1 +fi formatter=false if command -v clang-format-11 >/dev/null 2>&1; then @@ -28,7 +33,6 @@ files="${1:-$(git --no-pager diff --cached --name-only)}" files="$(echo "$files" | grep -E '\.(cpp|h)$')" if [ -z "$files" ]; then - echo "No .cpp or .h files to check." exit fi diff --git a/script/lint-shell-script.sh b/script/lint-shell-script.sh index dfcf00d..e5c4e6a 100755 --- a/script/lint-shell-script.sh +++ b/script/lint-shell-script.sh @@ -5,9 +5,14 @@ # ------------------------------------------ -# Get the full path to this script while handling spaces and symlinks correctly -scriptPath="$(cd -P -- "$(dirname -- "$0")" && pwd -P)" -cd "$scriptPath/.." || exit 1 +b="$(tput bold)" +red="$(tput setf 4)" +n="$(tput sgr0)" + +if [ ! -d ".git" ]; then + echo "${b}${red}Error:${n} please run this script from the project root" >&2 + exit 1 +fi if ! command -v shellcheck > /dev/null 2>&1; then echo "shellcheck is not available, but shell script files need linting!" @@ -19,7 +24,6 @@ files="${1:-$(git --no-pager diff --cached --name-only)}" files="$(echo "$files" | grep -E '\.sh$')" if [ -z "$files" ]; then - echo "No .sh files to check." exit fi diff --git a/script/pre-commit.sh b/script/pre-commit.sh index 9095383..9b9bac8 100755 --- a/script/pre-commit.sh +++ b/script/pre-commit.sh @@ -37,15 +37,9 @@ if [ ! -d ".git" ]; then exit 1 fi -currentDir="$(pwd -P)" - # Get the path from the project root to the script subDir="$(dirname -- "$0")" -# Get the full path to this script while handling spaces and symlinks correctly -scriptPath="$(cd -P -- "$subDir" && pwd -P)" -cd "$scriptPath/.." || exit 1 - hooks=" lint-ci.sh " @@ -53,7 +47,7 @@ lint-ci.sh install() { echo "Installing pre-commit hooks" - preCommit="$currentDir/.git/hooks/pre-commit" + preCommit=".git/hooks/pre-commit" if ! test -f "$preCommit"; then touch "$preCommit" chmod +x "$preCommit"