mirror of
https://git.sr.ht/~rjarry/aerc
synced 2025-02-22 14:53:57 +01:00

On macOS the -t option must immediately precede the prefix template or else the generated temp name includes a newline (!), which causes the rest of the sendemail-validate script to fail. Signed-off-by: Gregory Anders <greg@gpanders.com> Acked-by: Robin Jarry <robin@jarry.cc>
78 lines
2.2 KiB
Bash
Executable file
78 lines
2.2 KiB
Bash
Executable file
#!/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)
|
|
|
|
validate_cover_letter () {
|
|
file="$1"
|
|
true
|
|
}
|
|
|
|
validate_patch () {
|
|
file="$1"
|
|
# Ensure that the patch applies without conflicts.
|
|
git am -3 "$file" || return
|
|
# Sign the patch if patatt is available.
|
|
case "$(git config --default false --get sendemail.runPatatt)" in
|
|
TRUE|True|true|yes|YES|Yes|Y|y|on|ON|On|1)
|
|
command -v patatt >/dev/null 2>&1 || return
|
|
patatt sign --hook "$file" || return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
validate_series () {
|
|
command -v gmake >/dev/null 2>&1 && make="gmake" || make="make"
|
|
$make validate
|
|
}
|
|
|
|
# fallback for git 2.40 and older
|
|
: ${GIT_SENDEMAIL_FILE_COUNTER:=1}
|
|
: ${GIT_SENDEMAIL_FILE_TOTAL:=1}
|
|
|
|
if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1
|
|
then
|
|
remote=$(git config --default origin --get sendemail.validateRemote) &&
|
|
ref=$(git config --default master --get sendemail.validateRemoteRef) &&
|
|
worktree=$(mktemp -d -t 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
|