Files

59 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright 2020, Trail of Bits, Inc. All rights reserved.
# Get the list of changed C++ header and source files.
STAGED_FILES=$( git diff --cached --name-only --diff-filter=ACM | grep -e '\.\(h\)\|\(cpp\)$' )
if [[ "${STAGED_FILES}" = "" ]]; then
exit 0
fi
PYTHON3_EXE=$( which python3 )
if [[ "$?" == 1 ]]; then
echo "\t\033[41mPlease install python3\033[0m"
exit 1
fi
CLANG_FORMAT_EXE=$( which clang-format )
if [[ "$?" == 1 ]]; then
echo "\t\033[41mPlease install clang-format\033[0m"
exit 1
fi
THIS_FILE_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
NAME_OF_THIS_FILE_DIR=$( basename "${THIS_FILE_DIR}" )
IN_SCRIPTS_DIR=0
# This script being executed is located in the `scripts/` directory.
if [[ "${NAME_OF_THIS_FILE_DIR}" == "scripts" ]] ; then
SCRIPTS_DIR="${THIS_FILE_DIR}"
SOURCE_DIR=$( cd "$( dirname "${SCRIPTS_DIR}" )" && pwd )
IN_SCRIPTS_DIR=1
# This script being executed is located in the `.git/hooks` directory.
elif [[ "${NAME_OF_THIS_FILE_DIR}" == "hooks" ]] ; then
GIT_DIR=$( cd "$( dirname "${SCRIPTS_DIR}" )" && pwd )
SOURCE_DIR=$( cd "$( dirname "${GIT_DIR}" )" && pwd )
SCRIPTS_DIR="${SOURCE_DIR}/scripts"
# Not sure where this script is.
else
echo "\t\033[41mScript '${BASH_SOURCE[0]}' is in an unexpected location\033[0m"
echo 1
fi
# Run our wrapper of `clang-format` on the files that have changed.
${PYTHON3_EXE} "${SCRIPTS_DIR}/format-files" \
--source_dir "${SOURCE_DIR}" \
--format_exe "${CLANG_FORMAT_EXE}" \
--files ${STAGED_FILES} \
--check
if [[ "$?" == 0 ]] ; then
for staged_file in ${STAGED_FILES} ; do
git add "${staged_file}"
done
else
exit 1
fi