Created
January 17, 2019 09:55
-
-
Save jhrmnn/4ceb63ce7267e1711c90c1e740effa1e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# An example hook script to blocks unannotated tags from entering. | |
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new | |
# | |
# To enable this hook, rename this file to "update". | |
# | |
# Config | |
# ------ | |
# hooks.allowunannotated | |
# This boolean sets whether unannotated tags will be allowed into the | |
# repository. By default they won't be. | |
# hooks.allowdeletetag | |
# This boolean sets whether deleting tags will be allowed in the | |
# repository. By default they won't be. | |
# hooks.allowmodifytag | |
# This boolean sets whether a tag may be modified after creation. By default | |
# it won't be. | |
# hooks.allowdeletebranch | |
# This boolean sets whether deleting branches will be allowed in the | |
# repository. By default they won't be. | |
# hooks.denycreatebranch | |
# This boolean sets whether remotely creating branches will be denied | |
# in the repository. By default this is allowed. | |
# | |
# --- Command line | |
refname="$1" | |
oldrev="$2" | |
newrev="$3" | |
# --- Safety check | |
if [ -z "$GIT_DIR" ]; then | |
echo "Don't run this script from the command line." >&2 | |
echo " (if you want, you could supply GIT_DIR then run" >&2 | |
echo " $0 <ref> <oldrev> <newrev>)" >&2 | |
exit 1 | |
fi | |
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then | |
echo "usage: $0 <ref> <oldrev> <newrev>" >&2 | |
exit 1 | |
fi | |
# --- Config | |
allowunannotated=$(git config --bool hooks.allowunannotated) | |
allowdeletebranch=$(git config --bool hooks.allowdeletebranch) | |
denycreatebranch=$(git config --bool hooks.denycreatebranch) | |
allowdeletetag=$(git config --bool hooks.allowdeletetag) | |
allowmodifytag=$(git config --bool hooks.allowmodifytag) | |
# check for no description | |
projectdesc=$(sed -e '1q' "$GIT_DIR/description") | |
case "$projectdesc" in | |
"Unnamed repository"* | "") | |
echo "*** Project description file hasn't been set" >&2 | |
exit 1 | |
;; | |
esac | |
# --- Check types | |
# if $newrev is 0000...0000, it's a commit to delete a ref. | |
zero="0000000000000000000000000000000000000000" | |
if [ "$newrev" = "$zero" ]; then | |
newrev_type=delete | |
else | |
newrev_type=$(git cat-file -t $newrev) | |
fi | |
case "$refname","$newrev_type" in | |
refs/tags/*,commit) | |
# un-annotated tag | |
;; | |
refs/tags/*,delete) | |
# delete tag | |
;; | |
refs/tags/*,tag) | |
# annotated tag | |
;; | |
refs/heads/*,commit) | |
# branch | |
if test $(git rev-list "$newrev".."$oldrev"); then | |
if [ "$refname" = "refs/heads/master" ]; then | |
echo "hooks/update: Non-fast-forward updates are not allowed on the master branch" | |
exit 1 | |
fi | |
fi | |
;; | |
refs/heads/*,delete) | |
# delete branch | |
;; | |
refs/remotes/*,commit) | |
# tracking branch | |
;; | |
refs/remotes/*,delete) | |
# delete tracking branch | |
;; | |
*) | |
# Anything else (is there anything else?) | |
echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 | |
exit 1 | |
;; | |
esac | |
# --- Finished | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment