#!/usr/bin/env bash

# Copyright 2018 The Grin Developers
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

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=()

# first collect all the files that need reformatting
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
  # nothing to do
  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
