diff options
Diffstat (limited to 'tools/pre-commit')
-rwxr-xr-x | tools/pre-commit | 61 |
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 |