--- /dev/null
+SBCL Git Hooks
+
+These scripts live in /home/scm_git/s/sb/sbcl/sbcl.git/hooks on
+SourceForge, and have nothing to do with SBCL as such -- and
+everything to do with developer convenience and maintenance.
+
+To push updates there:
+
+ ssh -t <sfuser>,sbcl@shell.sourceforge.net create
+ scp <script> <sfuser>,sbcl@shell.sourceforge.net:/home/scm_git/s/sb/sbcl/sbcl.git/hooks/
--- /dev/null
+#!/bin/sh
+#
+# The "post-receive" script is run after receive-pack has accepted a pack
+# and the repository has been updated. It is passed arguments in through
+# stdin in the form
+# <oldrev> <newrev> <refname>
+# For example:
+# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
+#
+
+hooks/post-receive-email
--- /dev/null
+#!/bin/sh
+
+# --- 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
+
+# Don't allow merge commits on master
+if [ "$refname" = "refs/heads/master" ]
+then
+ for rev in $(git rev-list $newrev --not $oldrev)
+ do
+ echo -n "Checking: $rev"
+ if git rev-parse --verify --quiet $rev^2 > /dev/null
+ then
+ echo " (merge!)"
+ echo
+ echo "Merges not allowed on master. Rebase your changes instead."
+ echo
+ exit 1
+ else
+ echo " (ok)"
+ fi
+ done
+fi
+