1#!/bin/sh 2# 3# An example hook script to blocks unannotated tags from entering. 4# Called by git-receive-pack with arguments: refname sha1-old sha1-new 5# 6# To enable this hook, rename this file to "update". 7# 8# Config 9# ------ 10# hooks.allowunannotated 11# This boolean sets whether unannotated tags will be allowed into the 12# repository. By default they won't be. 13# hooks.allowdeletetag 14# This boolean sets whether deleting tags will be allowed in the 15# repository. By default they won't be. 16# hooks.allowdeletebranch 17# This boolean sets whether deleting branches will be allowed in the 18# repository. By default they won't be. 19# 20 21# --- Command line 22refname="$1" 23oldrev="$2" 24newrev="$3" 25 26# --- Safety check 27if[-z"$GIT_DIR"];then 28echo"Don't run this script from the command line.">&2 29echo" (if you want, you could supply GIT_DIR then run">&2 30echo"$0<ref> <oldrev> <newrev>)">&2 31exit1 32fi 33 34if[-z"$refname"-o -z"$oldrev"-o -z"$newrev"];then 35echo"Usage:$0<ref> <oldrev> <newrev>">&2 36exit1 37fi 38 39# --- Config 40allowunannotated=$(git config --bool hooks.allowunannotated) 41allowdeletebranch=$(git config --bool hooks.allowdeletebranch) 42allowdeletetag=$(git config --bool hooks.allowdeletetag) 43 44# check for no description 45projectdesc=$(sed -e '1q' "$GIT_DIR/description") 46if[-z"$projectdesc"-o"$projectdesc"="Unnamed repository; edit this file to name it for gitweb."];then 47echo"*** Project description file hasn't been set">&2 48exit1 49fi 50 51# --- Check types 52# if $newrev is 0000...0000, it's a commit to delete a ref. 53if["$newrev"="0000000000000000000000000000000000000000"];then 54 newrev_type=delete 55else 56 newrev_type=$(git-cat-file -t $newrev) 57fi 58 59case"$refname","$newrev_type"in 60 refs/tags/*,commit) 61# un-annotated tag 62 short_refname=${refname##refs/tags/} 63if["$allowunannotated"!="true"];then 64echo"*** The un-annotated tag,$short_refname, is not allowed in this repository">&2 65echo"*** Use 'git tag [ -a | -s ]' for tags you want to propagate.">&2 66exit1 67fi 68;; 69 refs/tags/*,delete) 70# delete tag 71if["$allowdeletetag"!="true"];then 72echo"*** Deleting a tag is not allowed in this repository">&2 73exit1 74fi 75;; 76 refs/tags/*,tag) 77# annotated tag 78;; 79 refs/heads/*,commit) 80# branch 81;; 82 refs/heads/*,delete) 83# delete branch 84if["$allowdeletebranch"!="true"];then 85echo"*** Deleting a branch is not allowed in this repository">&2 86exit1 87fi 88;; 89 refs/remotes/*,commit) 90# tracking branch 91;; 92 refs/remotes/*,delete) 93# delete tracking branch 94if["$allowdeletebranch"!="true"];then 95echo"*** Deleting a tracking branch is not allowed in this repository">&2 96exit1 97fi 98;; 99*) 100# Anything else (is there anything else?) 101echo"*** Update hook: unknown type of update to ref$refnameof type$newrev_type">&2 102exit1 103;; 104esac 105 106# --- Finished 107exit0