git: add missing git hook scripts from SourceForge
authorNikodemus Siivola <nikodemus@random-state.net>
Mon, 2 Jan 2012 10:18:07 +0000 (12:18 +0200)
committerNikodemus Siivola <nikodemus@random-state.net>
Mon, 2 Jan 2012 10:19:55 +0000 (12:19 +0200)
  We've been using these for a while now, but I neglected to stash copies in
  the repository.

  Also instructions for updating them, since it isn't the most intuitive thing
  in the world.

git/README [new file with mode: 0644]
git/post-receive [new file with mode: 0755]
git/update [new file with mode: 0755]

diff --git a/git/README b/git/README
new file mode 100644 (file)
index 0000000..533193a
--- /dev/null
@@ -0,0 +1,10 @@
+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/
diff --git a/git/post-receive b/git/post-receive
new file mode 100755 (executable)
index 0000000..3186b6d
--- /dev/null
@@ -0,0 +1,11 @@
+#!/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
diff --git a/git/update b/git/update
new file mode 100755 (executable)
index 0000000..c7e449a
--- /dev/null
@@ -0,0 +1,39 @@
+#!/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
+