46 строки
1.6 KiB
Bash
46 строки
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) eBPF for Windows contributors
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
set -o errexit
|
|
|
|
exit_() {
|
|
echo ""
|
|
echo "$1"
|
|
echo ""
|
|
echo "This hook can be skipped if needed with 'git commit --no-verify'"
|
|
echo "See '.git/hooks/pre-commit', installed from 'scripts/pre-commit'"
|
|
exit 1
|
|
}
|
|
|
|
if [[ $(git config --get user.name | wc -w) -lt 2 ]]; then
|
|
# This heuristic avoids bad user names such as "root" or "Ubuntu"
|
|
# or a computer login name. A full name should (usually) have at
|
|
# least two words. We can change this if needed later.
|
|
exit_ "Commit failed: please fix your Git user name (see docs/Contributing.md)"
|
|
fi
|
|
|
|
if ! git diff-index --check --cached HEAD --; then
|
|
exit_ "Commit failed: please fix the conflict markers or whitespace errors"
|
|
fi
|
|
|
|
mapfile -t files < <(git diff --cached --name-only --diff-filter=ACMR)
|
|
|
|
if [[ ${#files[@]} -eq 0 ]]; then
|
|
# When 'git commit --amend' is used, the files list is empty. The
|
|
# scripts below interpret an empty file set as a directive to
|
|
# check all the files, which is slow (but used in CI). So in this
|
|
# Git hook, we just skip the following checks instead.
|
|
exit 0
|
|
fi
|
|
|
|
scripts=$(git rev-parse --show-toplevel)/scripts
|
|
|
|
if ! "$scripts/format-code" --quiet --whatif --files="${files[*]}"; then
|
|
exit_ "Commit failed: to fix the formatting please run './scripts/format-code --staged' in bash or '.\\scripts\\format-code.ps1 --staged' in powershell"
|
|
fi
|
|
if ! "$scripts/check-license.sh" "${files[@]}"; then
|
|
exit_ "Commit failed: please add license headers to the above files"
|
|
fi
|