diff --git a/.hooks/pre-commit b/.hooks/pre-commit new file mode 100644 index 0000000000000000000000000000000000000000..2f1711eea5f8e87f967253ec72a036bba2184f87 --- /dev/null +++ b/.hooks/pre-commit @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# Activate via the following setting in .git/config +# [core] +# hooksPath = .hooks +# +# **Or** by copying this file to .git/hooks/pre-commit + +echo "Running pre-commit hook.." + +set -e + +RETURN_CODE=0 + +### git-lfs check ### +BINARY_FILES="" +CHANGED_FILES=$(git diff --cached --name-only --diff-filter=ACM) +LFS_FILES=$(echo $CHANGED_FILES | xargs git check-attr filter | grep 'filter: lfs$' | sed -e 's/: filter: lfs//') + +for FILE in $LFS_FILES; do + SOFT_SHA=$(git hash-object -w $FILE) + RAW_SHA=$(git hash-object -w --no-filters $FILE) + + if [ $SOFT_SHA == $RAW_SHA ]; then + BINARY_FILES="$FILE\n$BINARY_FILES" + fi +done + +if [[ -n "$BINARY_FILES" ]]; then + echo "Attention!" + echo "----------" + echo "You tried to commit files tracked by git-lfs as standard git objects:" + echo -e "\x1B[31m$BINARY_FILES\x1B[0m" + echo "Revert your changes and commit those files with git-lfs!" + echo "See https://docs.opengeosys.org/docs/devguide/getting-started/prerequisites" + echo "----------" + RETURN_CODE=1 +fi + +exit $RETURN_CODE