summaryrefslogtreecommitdiff
path: root/tools/pre-commit
diff options
context:
space:
mode:
Diffstat (limited to 'tools/pre-commit')
-rwxr-xr-xtools/pre-commit61
1 files changed, 61 insertions, 0 deletions
diff --git a/tools/pre-commit b/tools/pre-commit
new file mode 100755
index 00000000..c049b8f0
--- /dev/null
+++ b/tools/pre-commit
@@ -0,0 +1,61 @@
+#!/bin/sh
+
+# Exit with status 1 if any command below fails
+set -e
+
+# Exit if it's not a branch we're interested in being thorough about
+if echo $(git rev-parse --symbolic-full-name HEAD) | \
+ egrep -q '^refs/heads/(next|t/)'; then
+ exit 0
+fi
+
+# These are the locations I keep my temporary source and build trees in
+PRODUCTS=$(./acprep products) # generates a build directory name such as
+ # ~/Products/ledger
+TMPDIR=$PRODUCTS/pre-commit
+MIRROR=$PRODUCTS/pre-commit-mirror
+
+# Checkout a copy of the current index into MIRROR
+git checkout-index --prefix=$MIRROR/ -af
+
+# Remove files from MIRROR which are no longer present in the index
+git diff-index --cached --name-only --diff-filter=D -z HEAD | \
+ (cd $MIRROR && xargs -0 rm -f --)
+
+# Copy only _changed files_ from MIRROR to TMPDIR, without copying
+# timestamps. This includes copying over new files, and deleting
+# removed ones. This way, "make check" will only rebuild what is
+# necessary to validate the commit.
+rsync -rlpgoDOc --delete --exclude-from=tools/excludes $MIRROR/ $TMPDIR/
+
+# Everything else happens in the temporary build tree
+if [ ! -f $TMPDIR/lib/utfcpp/source/utf8.h ]; then
+ rsync -a --delete lib/utfcpp/ $TMPDIR/lib/utfcpp/
+fi
+cd $TMPDIR
+
+# Make sure there is a current Makefile. Regeneration of Makefile
+# happens automatically, but if myacprep or acprep changes, we want to
+# regenerate everything manually. If the user doesn't have acprep, look
+# for other common autoconf-related script files.
+if [ ! -f Makefile -o \
+ Makefile.in -nt Makefile -o \
+ configure -nt Makefile -o \
+ Makefile.am -nt Makefile.in -o \
+ configure.ac -nt configure -o \
+ \( -f acprep -a acprep -nt Makefile \) ]
+then
+ if [ -f acprep ]; then
+ ./acprep default --local
+ elif [ -f autogen.sh ]; then
+ sh autogen.sh && ./configure
+ else
+ autoreconf && ./configure
+ fi
+fi
+
+# Finally, (re)build this proposed source tree and see if it passes
+# muster.
+nice -n 20 make check
+
+exit 0