You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.3 KiB
77 lines
2.3 KiB
#!/bin/sh |
|
|
|
# An example hook script to validate a patch (and/or patch series) before |
|
# sending it via email. |
|
# |
|
# The hook should exit with non-zero status after issuing an appropriate |
|
# message if it wants to prevent the email(s) from being sent. |
|
# |
|
# To enable this hook, rename this file to "sendemail-validate". |
|
# |
|
# By default, it will only check that the patch(es) can be applied on top of |
|
# the default upstream branch without conflicts in a secondary worktree. After |
|
# validation (successful or not) of the last patch of a series, the worktree |
|
# will be deleted. |
|
# |
|
# The following config variables can be set to change the default remote and |
|
# remote ref that are used to apply the patches against: |
|
# |
|
# sendemail.validateRemote (default: origin) |
|
# sendemail.validateRemoteRef (default: HEAD) |
|
# |
|
# Replace the TODO placeholders with appropriate checks according to your |
|
# needs. |
|
|
|
validate_cover_letter () { |
|
file="$1" |
|
# TODO: Replace with appropriate checks (e.g. spell checking). |
|
true |
|
} |
|
|
|
validate_patch () { |
|
file="$1" |
|
# Ensure that the patch applies without conflicts. |
|
git am -3 "$file" || return |
|
# TODO: Replace with appropriate checks for this patch |
|
# (e.g. checkpatch.pl). |
|
true |
|
} |
|
|
|
validate_series () { |
|
# TODO: Replace with appropriate checks for the whole series |
|
# (e.g. quick build, coding style checks, etc.). |
|
true |
|
} |
|
|
|
# main ------------------------------------------------------------------------- |
|
|
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1 |
|
then |
|
remote=$(git config --default origin --get sendemail.validateRemote) && |
|
ref=$(git config --default HEAD --get sendemail.validateRemoteRef) && |
|
worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) && |
|
git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" && |
|
git config --replace-all sendemail.validateWorktree "$worktree" |
|
else |
|
worktree=$(git config --get sendemail.validateWorktree) |
|
fi || { |
|
echo "sendemail-validate: error: failed to prepare worktree" >&2 |
|
exit 1 |
|
} |
|
|
|
unset GIT_DIR GIT_WORK_TREE |
|
cd "$worktree" && |
|
|
|
if grep -q "^diff --git " "$1" |
|
then |
|
validate_patch "$1" |
|
else |
|
validate_cover_letter "$1" |
|
fi && |
|
|
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" |
|
then |
|
git config --unset-all sendemail.validateWorktree && |
|
trap 'git worktree remove -ff "$worktree"' EXIT && |
|
validate_series |
|
fi
|
|
|