Created
June 16, 2015 19:27
-
-
Save cvogt/2676ed6c6d1abafa3d6a to your computer and use it in GitHub Desktop.
Revisions
-
cvogt created this gist
Jun 16, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,5 @@ #!/bin/sh cd "$(dirname "$0")" touch .git/hooks/pre-commit rm .git/hooks/pre-commit ln -s ../../pre-commit-hook.sh .git/hooks/pre-commit This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,72 @@ #!/bin/sh # checks if locally staged changes are # formatted properly. Ignores non-staged # changes. # Intended as git pre-commit hook _DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) DIR=$( echo $_DIR | sed 's/\/.git\/hooks$//' ) echo "" echo "Running pre-commit hook ... (you can omit this with --no-verify, but don't)" git diff --quiet hadNoNonStagedChanges=$? if ! [ $hadNoNonStagedChanges -eq 0 ] then echo "* Stashing non-staged changes" git stash --keep-index -u > /dev/null fi echo "* Compiling/formatting staged changes" $DIR/sbt ";test:compile;format" > /dev/null compiles=$? echo "* Compiles?" if [ $compiles -eq 0 ] then echo "* Yes!" echo "* Properly formatted?" git diff --quiet formatted=$? if [ $formatted -eq 0 ] then echo "* Yes!" else echo "* No!" echo "The following files need formatting (in stage or commited):" git diff --name-only echo "" fi else echo "* No!" fi echo "* Undoing formatting" git stash --keep-index > /dev/null git stash drop > /dev/null if ! [ $hadNoNonStagedChanges -eq 0 ] then echo "* Scheduling stash pop of previously stashed non-staged changes for 1 second after commit" sleep 1 && git stash pop --index > /dev/null & # sleep and & otherwise commit fails when this leads to a merge conflict fi if [ $compiles -eq 0 ] && [ $formatted -eq 0 ] then echo "... done. Proceeding with commit." exit 0 elif [ $compiles -eq 0 ] then echo "... done." echo "CANCELLING commit due to NON-FORMATTED CODE." exit 1 else echo "... done." echo "CANCELLING commit due to COMPILE ERROR." exit 2 fi