From 0b57cdd736e7ce5cbcebea29c9bca7a3c841aff8 Mon Sep 17 00:00:00 2001 From: Pratyush Mishra Date: Wed, 4 Mar 2020 16:05:57 -0800 Subject: [PATCH] Add a pre-commit hook for rustfmt (#102) * add a pre-commit hook for rustfmt * make printing sccache stats optional * fixup! add a pre-commit hook for rustfmt --- .hooks/pre-commit | 36 ++++++++++++++++++++++++++++++++++++ scripts/install-hook.sh | 9 +++++++++ 2 files changed, 45 insertions(+) create mode 100755 .hooks/pre-commit create mode 100755 scripts/install-hook.sh diff --git a/.hooks/pre-commit b/.hooks/pre-commit new file mode 100755 index 0000000..f3a3b0d --- /dev/null +++ b/.hooks/pre-commit @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +rustfmt --version &>/dev/null +if [ $? != 0 ]; then + printf "[pre_commit] \033[0;31merror\033[0m: \"rustfmt\" not available. \n" + printf "[pre_commit] \033[0;31merror\033[0m: rustfmt can be installed via - \n" + printf "[pre_commit] $ rustup component add rustfmt-preview \n" + exit 1 +fi + +problem_files=() + +# collect ill-formatted files +for file in $(git diff --name-only --cached); do + if [ ${file: -3} == ".rs" ]; then + rustfmt --check $file &>/dev/null + if [ $? != 0 ]; then + problem_files+=($file) + fi + fi +done + +if [ ${#problem_files[@]} == 0 ]; then + # done + printf "[pre_commit] rustfmt \033[0;32mok\033[0m \n" +else + # reformat the files that need it and re-stage them. + printf "[pre_commit] the following files were rustfmt'd before commit: \n" + for file in ${problem_files[@]}; do + rustfmt $file + git add $file + printf "\033[0;32m $file\033[0m \n" + done +fi + +exit 0 \ No newline at end of file diff --git a/scripts/install-hook.sh b/scripts/install-hook.sh new file mode 100755 index 0000000..eafcf81 --- /dev/null +++ b/scripts/install-hook.sh @@ -0,0 +1,9 @@ +#!/bin/env bash +# This script will install the provided directory ../.hooks as the hook +# directory for the present repo. See there for hooks, including a pre-commit +# hook that runs rustfmt on files before a commit. + +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +HOOKS_DIR="${DIR}/../.hooks" + +git config core.hooksPath "$HOOKS_DIR"