diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-09-30 17:34:25 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2024-09-30 17:34:25 +0200 |
commit | 05672f7435cfa419893b4282d49254390181833e (patch) | |
tree | b99ab6849e2f3851c593a593b58d3b7d840ddfcf /build/rust/git_template/hooks/sendemail-validate.sample | |
parent | build(cog.toml): Format *before* checking the formatting (diff) | |
download | flake-templates-0.7.0.tar.gz flake-templates-0.7.0.zip |
chore(version): v0.7.0 v0.7.0
Diffstat (limited to '')
-rw-r--r-- | build/rust/git_template/hooks/sendemail-validate.sample | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/build/rust/git_template/hooks/sendemail-validate.sample b/build/rust/git_template/hooks/sendemail-validate.sample new file mode 100644 index 0000000..52aa61c --- /dev/null +++ b/build/rust/git_template/hooks/sendemail-validate.sample @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +# 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 |