diff --git a/scripts/hooks/post-commit b/scripts/hooks/post-commit index b2adcd02..ba85f102 100755 --- a/scripts/hooks/post-commit +++ b/scripts/hooks/post-commit @@ -1,34 +1,38 @@ +#!/usr/bin/env bash +# doesn't matter if this gets repeated later on in a hooks file # Use a console with emojis support for a better experience # Stash uncommited changes -MSG="post-commit-$(date +%s)" -git stash push -kqum $MSG -STASH_LIST=$(git stash list) +MSG="post-commit-$(date +%s)"; +git stash push -kqum "$MSG"; +STASH_LIST=$(git stash list); if [[ "$STASH_LIST" == *"$MSG"* ]]; then - echo "Uncommited changes stashed with message '$MSG', if you abort before they are restored run \`git stash pop\`" + echo "Uncommited changes stashed with message '$MSG', if you abort before they are restored run \`git stash pop\`"; fi # Run style checker and print state (it doesn't block the commit) -pycodestyle --config=./ci/tox.ini ./capa/ > style-checker-output.log 2>&1 +pycodestyle --config=./ci/tox.ini ./capa/ > style-checker-output.log 2>&1; if [ $? == 0 ]; then - echo 'Style checker succeeds!! 💘' + echo 'Style checker succeeds!! 💘'; else - echo 'Style checker failed 😭\nCheck style-checker-output.log for details' - exit 1 + echo 'Style checker failed 😭'; + echo 'Check style-checker-output.log for details'; + exit 1; fi # Run rule linter and print state (it doesn't block the commit) -python ./scripts/lint.py ./rules/ > rule-linter-output.log 2>&1 +python ./scripts/lint.py ./rules/ > rule-linter-output.log 2>&1; if [ $? == 0 ]; then - echo 'Rule linter succeeds!! 💖' + echo 'Rule linter succeeds!! 💖'; else - echo 'Rule linter failed 😭\nCheck rule-linter-output.log for details' - exit 2 + echo 'Rule linter failed 😭'; + echo 'Check rule-linter-output.log for details'; + exit 2; fi # Restore stashed changes if [[ "$STASH_LIST" == *"$MSG"* ]]; then - git stash pop -q --index - echo "Stashed changes '$MSG' restored" + git stash pop -q --index; + echo "Stashed changes '$MSG' restored"; fi diff --git a/scripts/hooks/pre-push b/scripts/hooks/pre-push index dd6ca612..edab4689 100755 --- a/scripts/hooks/pre-push +++ b/scripts/hooks/pre-push @@ -1,52 +1,57 @@ +#!/usr/bin/env bash +# doesn't matter if this gets repeated later on in a hooks file # Use a console with emojis support for a better experience # Stash uncommited changes -MSG="pre-push-$(date +%s)" -git stash push -kqum $MSG -STASH_LIST=$(git stash list) +MSG="pre-push-$(date +%s)"; +git stash push -kqum "$MSG"; +STASH_LIST=$(git stash list); if [[ "$STASH_LIST" == *"$MSG"* ]]; then - echo "Uncommited changes stashed with message '$MSG', if you abort before they are restored run \`git stash pop\`" + echo "Uncommited changes stashed with message '$MSG', if you abort before they are restored run \`git stash pop\`"; fi restore_stashed() { if [[ "$STASH_LIST" == *"$MSG"* ]]; then - git stash pop -q --index - echo "Stashed changes '$MSG' restored" + git stash pop -q --index; + echo "Stashed changes '$MSG' restored"; fi } # Run style checker and print state -pycodestyle --config=./ci/tox.ini ./capa/ > style-checker-output.log 2>&1 +pycodestyle --config=./ci/tox.ini ./capa/ > style-checker-output.log 2>&1; if [ $? == 0 ]; then - echo 'Style checker succeeds!! 💘' + echo 'Style checker succeeds!! 💘'; else - echo 'Style checker failed 😭 PUSH ABORTED\nCheck style-checker-output.log for details' - restore_stashed - exit 1 + echo 'Style checker failed 😭 PUSH ABORTED'; + echo 'Check style-checker-output.log for details'; + restore_stashed; + exit 1; fi # Run rule linter and print state -python ./scripts/lint.py ./rules/ > rule-linter-output.log 2>&1 +python ./scripts/lint.py ./rules/ > rule-linter-output.log 2>&1; if [ $? == 0 ]; then - echo 'Rule linter succeeds!! 💖' + echo 'Rule linter succeeds!! 💖'; else - echo 'Rule linter failed 😭 PUSH ABORTED\nCheck rule-linter-output.log for details' - restore_stashed - exit 2 + echo 'Rule linter failed 😭 PUSH ABORTED'; + echo 'Check rule-linter-output.log for details'; + restore_stashed; + exit 2; fi # Run tests -echo 'Running tests, please wait ⌛' -pytest tests/ --maxfail=1 +echo 'Running tests, please wait ⌛'; +pytest tests/ --maxfail=1; if [ $? == 0 ]; then - echo 'Tests succeed!! 🎉' + echo 'Tests succeed!! 🎉'; else - echo 'Tests failed 😓 PUSH ABORTED\nRun `pytest -v --cov=capa test/` if you need more details' - restore_stashed - exit 3 + echo 'Tests failed 😓 PUSH ABORTED'; + echo 'Run `pytest -v --cov=capa test/` if you need more details'; + restore_stashed; + exit 3; fi -echo 'PUSH SUCCEEDED 🎉🎉' +echo 'PUSH SUCCEEDED 🎉🎉'; -restore_stashed +restore_stashed; diff --git a/scripts/setup-hooks.sh b/scripts/setup-hooks.sh index 5c5feae3..95d35016 100755 --- a/scripts/setup-hooks.sh +++ b/scripts/setup-hooks.sh @@ -1,23 +1,21 @@ #!/usr/bin/env bash -set -e -set -u -set -o pipefail +set -euo pipefail -GIT_DIR=`git rev-parse --show-toplevel` -cd $GIT_DIR +GIT_DIR=$(git rev-parse --show-toplevel); +cd "$GIT_DIR"; # hooks may exist already (e.g. git-lfs configuration) # If the `.git/hooks/$arg` file doesn't exist it, initialize with `#!/bin/sh` # After that append `scripts/hooks/$arg` and ensure they can be run create_hook() { if [[ ! -e .git/hooks/$1 ]]; then - echo "#!/bin/sh" > ".git/hooks/$1" + echo "#!/bin/sh" > ".git/hooks/$1"; fi - cat scripts/hooks/$1 >> ".git/hooks/$1" - chmod +x .git/hooks/$1 + cat scripts/hooks/"$1" >> ".git/hooks/$1"; + chmod +x .git/hooks/"$1"; } -echo '\n#### Copying hooks into .git/hooks' -create_hook 'post-commit' -create_hook 'pre-push' +printf '\n#### Copying hooks into .git/hooks'; +create_hook 'post-commit'; +create_hook 'pre-push';