| #!/bin/sh |
| # Check for "DELME" in commit messages of about-to-be-pushed commits |
| #################################################################### |
| # This hook script is triggered by `git push` right after a connection to the remote |
| # was established and its initial response was received, and right before generating |
| # and pushing a pack-file. |
| # The operation will be aborted when exiting with a non-zero status. |
| # |
| # The following arguments are provided: |
| # |
| # $1 - The symbolic name of the remote to push to, like "origin" or the URL like "https://github.com/Byron/gitoxide" if there is no such name. |
| # $2 - The URL of the remote to push to, like "https://github.com/Byron/gitoxide". |
| # |
| # The hook should then read from standard input in a line-by-line fashion and split the following space-separated fields: |
| # |
| # * local ref - the left side of a ref-spec, i.e. "local" of the "local:refs/heads/remote" ref-spec |
| # * local hash - the hash of the commit pointed to by `local ref` |
| # * remote ref - the right side of a ref-spec, i.e. "refs/heads/remote" of the "local:refs/heads/remote" ref-spec |
| # * remote hash - the hash of the commit pointed to by `remote ref` |
| # |
| # In this example, we abort the push if any of the about-to-be-pushed commits have "DELME" in their commit message. |
| # |
| # To enable this hook remove the `.sample` suffix from this file entirely. |
| |
| remote="$1" |
| url="$2" |
| |
| # Check each commit being pushed |
| while read _local_ref local_hash _remote_ref _remote_hash; do |
| # Skip if the local hash is all zeroes (deletion) |
| zero_sha=$(printf "%0${#local_hash}d" 0) |
| if [ "$local_hash" = "$zero_sha" ]; then |
| continue |
| fi |
| # Get the commit message |
| commit_msg=$(git log --format=%s -n 1 "$local_hash") |
| |
| # Check if the commit message contains "DELME" |
| if echo "$commit_msg" | grep -iq "DELME"; then |
| echo "Error: Found commit with 'DELME' in message. Push aborted to $remote ($url) aborted." 1>&2 |
| exit 1 |
| fi |
| done |
| |
| # If no commit with "DELME" found, allow the push |
| exit 0 |