From 41a7fe5b0350548ee04acbdee0e60c9df47e3c79 Mon Sep 17 00:00:00 2001 From: Brad King <brad.king@kitware.com> Date: Tue, 13 Dec 2016 14:23:54 -0500 Subject: [PATCH] Add pre-commit hook to check whether SetupForDevelopment must re-run Add a version number to the `SetupForDevelopment.sh` script and use a pre-commit hook to check when it changes. --- .gitattributes | 1 + .hooks-config | 2 ++ GitSetup/pre-commit | 26 ++++++++++++++++++++++++++ SetupForDevelopment.sh | 4 ++++ 4 files changed, 33 insertions(+) create mode 100644 .hooks-config create mode 100755 GitSetup/pre-commit diff --git a/.gitattributes b/.gitattributes index 8027e27..068ec18 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,6 @@ .git* export-ignore .gitattributes -export-ignore +.hooks* export-ignore /GitSetup export-ignore /SetupForDevelopment.sh export-ignore eol=lf diff --git a/.hooks-config b/.hooks-config new file mode 100644 index 0000000..739cdd2 --- /dev/null +++ b/.hooks-config @@ -0,0 +1,2 @@ +[hooks "chain"] + pre-commit = GitSetup/pre-commit diff --git a/GitSetup/pre-commit b/GitSetup/pre-commit new file mode 100755 index 0000000..1f1d3f5 --- /dev/null +++ b/GitSetup/pre-commit @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +egrep-q() { + egrep "$@" >/dev/null 2>/dev/null +} + +die() { + echo 'pre-commit hook failure' 1>&2 + echo '-----------------------' 1>&2 + echo '' 1>&2 + echo "$@" 1>&2 + exit 1 +} + +#----------------------------------------------------------------------------- + +# Check that developmer setup is up-to-date. +lastSetupForDevelopment=$(git config --get hooks.SetupForDevelopment || echo 0) +eval $(grep '^SetupForDevelopment_VERSION=' "${BASH_SOURCE%/*}/../SetupForDevelopment.sh") +test -n "$SetupForDevelopment_VERSION" || SetupForDevelopment_VERSION=0 +if test $lastSetupForDevelopment -lt $SetupForDevelopment_VERSION; then + die 'Developer setup in this work tree is out of date. Please re-run + + ./SetupForDevelopment.sh +' +fi diff --git a/SetupForDevelopment.sh b/SetupForDevelopment.sh index 81499ad..520884b 100755 --- a/SetupForDevelopment.sh +++ b/SetupForDevelopment.sh @@ -10,3 +10,7 @@ GitSetup/tips # Rebase master by default git config rebase.stat true git config branch.master.rebase true + +# Record the version of this setup so Scripts/pre-commit can check it. +SetupForDevelopment_VERSION=1 +git config hooks.SetupForDevelopment ${SetupForDevelopment_VERSION} -- GitLab