arnaucube
arnaucube/ark-r1cs-stdPublic Self-hosted repository
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
Pratyush Mishra pratyushmishra@berkeley.edu
Wed, 04 Mar 2020 16:05:57 -0800
commit

0b57cdd736e7ce5cbcebea29c9bca7a3c841aff8

parent

50c0511ba3be1195f5c6805f0d75f2cb6e0e4d23

2 files changed, 45 insertions(+), 0 deletions(-)

jump to
A .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
A 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"