Last active
January 25, 2019 15:42
-
-
Save folex/9496c457bcbbef36255a533389da740e to your computer and use it in GitHub Desktop.
Script to add git hook to run rustfmt before commit
This file contains 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 characters
#!/bin/sh | |
# check that rustfmt installed, or else this hook doesn't make much sense | |
command -v rustfmt >/dev/null 2>&1 || { echo >&2 "Rustfmt is required but it's not installed. Aborting."; exit 1; } | |
# write a whole script to pre-commit hook | |
# NOTE: it will overwrite pre-commit file! | |
cat > .git/hooks/pre-commit <<'EOF' | |
#!/bin/bash -e | |
declare -a rust_files=() | |
files=$(git diff-index --name-only HEAD) | |
echo 'Formatting source files' | |
for file in $files; do | |
if [ ! -f "${file}" ]; then | |
continue | |
fi | |
if [[ "${file}" == *.rs ]]; then | |
rust_files+=("${file}") | |
fi | |
done | |
if [ ${#rust_files[@]} -ne 0 ]; then | |
command -v rustfmt >/dev/null 2>&1 || { echo >&2 "Rustfmt is required but it's not installed. Aborting."; exit 1; } | |
$(command -v rustfmt) ${rust_files[@]} & | |
fi | |
wait | |
if [ ${#rust_files[@]} -ne 0 ]; then | |
git add ${rust_files[@]} | |
echo "Formatting done, changed files: ${rust_files[@]}" | |
else | |
echo "No changes, formatting skipped" | |
fi | |
EOF | |
chmod +x .git/hooks/pre-commit | |
echo "Hooks updated" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment