| #!/bin/sh |
| |
| here=${0%/*} |
| |
| CHIP_ROOT=$(cd "$here/.." && pwd) |
| |
| SAVED_UNSTAGED=0 |
| SAVED_UNSTAGED_FILE=$(git rev-parse --short HEAD)-unstaged.diff |
| |
| RESTYLED=0 |
| |
| save_unstaged() { |
| if [[ $SAVED_UNSTAGED -ne 0 ]]; then |
| git diff --output="$SAVED_UNSTAGED_FILE" |
| git apply -R "$SAVED_UNSTAGED_FILE" |
| fi |
| } |
| |
| revert_unstaged() { |
| if [[ $SAVED_UNSTAGED -ne 0 ]]; then |
| git apply "$SAVED_UNSTAGED_FILE" |
| rm "$SAVED_UNSTAGED_FILE" |
| fi |
| SAVED_UNSTAGED=0 |
| } |
| |
| revert_restyled() { |
| if [[ $RESTYLED -ne 0 ]]; then |
| # Reset the changes introduced by restyle |
| git stash push -q --keep-index |
| git stash drop -q |
| fi |
| RESTYLED=0 |
| } |
| |
| revert_if_needed() { |
| revert_restyled |
| revert_unstaged |
| } |
| |
| trap "revert_if_needed; exit 1" SIGINT SIGTERM SIGKILL |
| |
| git diff --quiet |
| SAVED_UNSTAGED=$? |
| |
| # If there are unstaged files, save them for now |
| save_unstaged |
| |
| # Try restyling the code |
| "$CHIP_ROOT"/scripts/helpers/restyle-diff.sh |
| |
| git diff --quiet |
| RESTYLED=$? |
| FAILED_COMMIT="$RESTYLED" |
| |
| revert_if_needed |
| |
| if [[ $FAILED_COMMIT -ne 0 ]]; then |
| echo "Commit Failed: Code needs restyling before committing." |
| echo "Restyling can be done by running $CHIP_ROOT/scripts/helpers/restyle-diff.sh" |
| exit 1 |
| fi |
| |
| echo "Code doesn't need restyling. Committing." |