summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--githooks/update32
1 files changed, 32 insertions, 0 deletions
diff --git a/githooks/update b/githooks/update
new file mode 100644
index 0000000..47934c7
--- /dev/null
+++ b/githooks/update
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+set -ue
+
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+if [ -z "${1+x}" ] || [ -z "${2+x}" ] || [ -z "${3+x}" ]; then
+ echo "Usage: $0 REFNAME OLDREV NEWREF"
+ exit 1
+fi
+
+
+[[ -z "$(git rev-list --max-count 1 "$oldrev".."$newrev" || echo "fail")" ]]
+is_ff=$?
+
+if $is_ff; then
+ # always allow fast forwards
+ exit 0
+fi
+
+if [[ "$refname" != refs/heads/master ]]; then
+ # allow force-pushing if it's not master
+ exit 0
+fi
+
+case $USER in
+*)
+ exit 1
+ ;;
+esac