Mercurial > nixos
comparison config/dmenu/.git/hooks/sendemail-validate.sample @ 0:face7f4d84f7
Initial commit
| author | Yasuri <yasuri@charliesmp.net> |
|---|---|
| date | Mon, 28 Sep 2026 13:10:19 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:face7f4d84f7 |
|---|---|
| 1 #!/nix/store/svx59425zxp552p2b8gm11qj5r09b56i-bash-5.3p15/bin/bash | |
| 2 | |
| 3 # An example hook script to validate a patch (and/or patch series) before | |
| 4 # sending it via email. | |
| 5 # | |
| 6 # The hook should exit with non-zero status after issuing an appropriate | |
| 7 # message if it wants to prevent the email(s) from being sent. | |
| 8 # | |
| 9 # To enable this hook, rename this file to "sendemail-validate". | |
| 10 # | |
| 11 # By default, it will only check that the patch(es) can be applied on top of | |
| 12 # the default upstream branch without conflicts in a secondary worktree. After | |
| 13 # validation (successful or not) of the last patch of a series, the worktree | |
| 14 # will be deleted. | |
| 15 # | |
| 16 # The following config variables can be set to change the default remote and | |
| 17 # remote ref that are used to apply the patches against: | |
| 18 # | |
| 19 # sendemail.validateRemote (default: origin) | |
| 20 # sendemail.validateRemoteRef (default: HEAD) | |
| 21 # | |
| 22 # Replace the TODO placeholders with appropriate checks according to your | |
| 23 # needs. | |
| 24 | |
| 25 validate_cover_letter () { | |
| 26 file="$1" | |
| 27 # TODO: Replace with appropriate checks (e.g. spell checking). | |
| 28 true | |
| 29 } | |
| 30 | |
| 31 validate_patch () { | |
| 32 file="$1" | |
| 33 # Ensure that the patch applies without conflicts. | |
| 34 git am -3 "$file" || return | |
| 35 # TODO: Replace with appropriate checks for this patch | |
| 36 # (e.g. checkpatch.pl). | |
| 37 true | |
| 38 } | |
| 39 | |
| 40 validate_series () { | |
| 41 # TODO: Replace with appropriate checks for the whole series | |
| 42 # (e.g. quick build, coding style checks, etc.). | |
| 43 true | |
| 44 } | |
| 45 | |
| 46 # main ------------------------------------------------------------------------- | |
| 47 | |
| 48 if test "$GIT_SENDEMAIL_FILE_COUNTER" = 1 | |
| 49 then | |
| 50 remote=$(git config --default origin --get sendemail.validateRemote) && | |
| 51 ref=$(git config --default HEAD --get sendemail.validateRemoteRef) && | |
| 52 worktree=$(mktemp --tmpdir -d sendemail-validate.XXXXXXX) && | |
| 53 git worktree add -fd --checkout "$worktree" "refs/remotes/$remote/$ref" && | |
| 54 git config --replace-all sendemail.validateWorktree "$worktree" | |
| 55 else | |
| 56 worktree=$(git config --get sendemail.validateWorktree) | |
| 57 fi || { | |
| 58 echo "sendemail-validate: error: failed to prepare worktree" >&2 | |
| 59 exit 1 | |
| 60 } | |
| 61 | |
| 62 unset GIT_DIR GIT_WORK_TREE | |
| 63 cd "$worktree" && | |
| 64 | |
| 65 if grep -q "^diff --git " "$1" | |
| 66 then | |
| 67 validate_patch "$1" | |
| 68 else | |
| 69 validate_cover_letter "$1" | |
| 70 fi && | |
| 71 | |
| 72 if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" | |
| 73 then | |
| 74 git config --unset-all sendemail.validateWorktree && | |
| 75 trap 'git worktree remove -ff "$worktree"' EXIT && | |
| 76 validate_series | |
| 77 fi |
