зеркало из https://github.com/mozilla/gecko-dev.git
64 строки
2.1 KiB
Bash
Executable File
64 строки
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# This is a pre-commit hook for use with either mercurial or git.
|
|
#
|
|
# Install this by running the script with an argument of "install".
|
|
#
|
|
# All that does is add the following lines to .hg/hgrc:
|
|
#
|
|
# [hook]
|
|
# pretxncommit.clang-format = [ ! -x ./coreconf/precommit.clang-format.sh ] || ./coreconf/precommit.clang-format.sh
|
|
#
|
|
# Or installs a symlink to .git/hooks/precommit:
|
|
# $ ln -s ../../coreconf/precommit.clang-format.sh .git/hooks/pre-commit
|
|
|
|
hash clang-format || exit 1
|
|
[ "$(hg root 2>/dev/null)" = "$PWD" ] && hg=1 || hg=0
|
|
[ "$(git rev-parse --show-toplevel 2>/dev/null)" = "$PWD" ] && git=1 || git=0
|
|
|
|
if [ "$1" = "install" ]; then
|
|
if [ "$hg" -eq 1 ]; then
|
|
hgrc="$(hg root)"/.hg/hgrc
|
|
if ! grep -q '^pretxncommit.clang-format' "$hgrc"; then
|
|
echo '[hooks]' >> "$hgrc"
|
|
echo 'pretxncommit.clang-format = [ ! -x ./coreconf/precommit.clang-format.sh ] || ./coreconf/precommit.clang-format.sh' >> "$hgrc"
|
|
echo "Installed mercurial pretxncommit hook"
|
|
exit
|
|
fi
|
|
fi
|
|
if [ "$git" -eq 1 ]; then
|
|
hook="$(git rev-parse --show-toplevel)"/.git/hooks/pre-commit
|
|
if [ ! -e "$hook" ]; then
|
|
ln -s ../../coreconf/precommit.clang-format.sh "$hook"
|
|
echo "Installed git pre-commit hook"
|
|
exit
|
|
fi
|
|
fi
|
|
echo "Hook already installed, or not in NSS repo"
|
|
exit 2
|
|
fi
|
|
|
|
err=0
|
|
files=()
|
|
if [ "$hg" -eq 1 ]; then
|
|
files=($(hg status -m -a --rev tip^:tip | cut -f 2 -d ' ' -))
|
|
fi
|
|
if [ "$git" -eq 1 ]; then
|
|
files=($(git status --porcelain | sed '/^[MACU]/{s/..//;p;};/^R/{s/^.* -> //;p;};d'))
|
|
fi
|
|
tmp=$(mktemp)
|
|
trap 'rm -f "$tmp"' ERR EXIT
|
|
for f in "${files[@]}"; do
|
|
ext="${f##*.}"
|
|
if [ "$ext" = "c" -o "$ext" = "h" -o "$ext" = "cc" ]; then
|
|
[ "$hg" -eq 1 ] && hg cat -r tip "$f" > "$tmp"
|
|
[ "$git" -eq 1 ] && git show :"$f" > "$tmp"
|
|
if ! cat "$tmp" | clang-format -assume-filename="$f" | \
|
|
diff -q "$tmp" - >/dev/null; then
|
|
[ "$err" -eq 0 ] && echo "Formatting errors found in:" 1>&2
|
|
echo " $f" 1>&2
|
|
err=1
|
|
fi
|
|
fi
|
|
done
|
|
exit "$err"
|