diff --git a/hooks/pre-commit.hook b/hooks/pre-commit.hook index 482f121..20de83f 100755 --- a/hooks/pre-commit.hook +++ b/hooks/pre-commit.hook @@ -1,3 +1,37 @@ #!/bin/bash -cd AfRApay.MateCard -uncrustify --no-backup -c .uncrustify.cfg src/*.cpp include/*.h + +# Regexp for grep to only choose some file extensions for formatting +exts="\.\(cpp\|h\)$" + +# The formatter to use +formatter=`which uncrustify` + +# Check availability of the formatter +if [ -z "$formatter" ] +then + 1>&2 echo "$formatter not found. Pre-commit formatting will not be done." + exit 0 +fi + +# Format staged files +for file in `git diff --cached --name-only --diff-filter=ACMR | grep $exts` +do + echo "Formatting $file" + # Get the file from index + git show ":$file" > "$file.tmp" + # Format it + "$formatter" --no-backup -c AfRApay.MateCard/.uncrustify.cfg "$file.tmp" + # Create a blob object from the formatted file + hash=`git hash-object -w "$file.tmp"` + # Add it back to index + git update-index --add --cacheinfo 100644 "$hash" "$file" + # Remove the tmp file + rm "$file.tmp" +done + +# If no files left in index after formatting - fail +ret=0 +if [ ! "`git diff --cached --name-only`" ]; then + 1>&2 echo "No files left after formatting" + exit 1 +fi