Re: [PATCH v2 3/3] Add sample pre-push hook script
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 14, 2013, 17:42 UTC
- Message-ID
- <7vobgrek5m.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <1358054224-7710-4-git-send-email-aaron@schrab.com>
Aaron Schrab <aaron@schrab.com> writes:
Show 37 quoted lines
> Create a sample of a script for a pre-push hook. The main purpose is to > illustrate how a script may parse the information which is supplied to > such a hook. The script may also be useful to some people as-is for > avoiding to push commits which are marked as a work in progress. > > Signed-off-by: Aaron Schrab <aaron@schrab.com> > --- > templates/hooks--pre-push.sample | 53 ++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 53 insertions(+) > create mode 100644 templates/hooks--pre-push.sample > > diff --git a/templates/hooks--pre-push.sample b/templates/hooks--pre-push.sample > new file mode 100644 > index 0000000..15ab6d8 > --- /dev/null > +++ b/templates/hooks--pre-push.sample > @@ -0,0 +1,53 @@ > +#!/bin/sh > + > +# An example hook script to verify what is about to be pushed. Called by "git > +# push" after it has checked the remote status, but before anything has been > +# pushed. If this script exits with a non-zero status nothing will be pushed. > +# > +# This hook is called with the following parameters: > +# > +# $1 -- Name of the remote to which the push is being done > +# $2 -- URL to which the push is being done > +# > +# If pushing without using a named remote those arguments will be equal. > +# > +# Information about the commits which are being pushed is supplied as lines to > +# the standard input in the form: > +# > +# <local ref> <local sha1> <remote ref> <remote sha1> > +# > +# This sample shows how to prevent push of commits where the log message starts > +# with "WIP" (work in progress).
An example for a plausible use case is nice to have. I would prefer to see any new shell script to follow the Git style, though.
Show 11 quoted lines
> +remote="$1" > +url="$2" > + > +z40=0000000000000000000000000000000000000000 > + > +IFS=' ' > +while read local_ref local_sha remote_ref remote_sha > +do > + if [ "$local_sha" = $z40 ] > + then > + # Handle delete
... by doing what?
Show 21 quoted lines
> + else > + if [ "$remote_sha" = $z40 ] > + then > + # New branch, examine all commits > + range="$local_sha" > + else > + # Update to existing branch, examine new commits > + range="$remote_sha..$local_sha" > + fi > + > + # Check for WIP commit > + commit=`git rev-list -n 1 --grep '^WIP' "$range"` > + if [ -n "$commit" ] > + then > + echo "Found WIP commit in $local_ref, not pushing" > + exit 1 > + fi > + fi > +done > + > +exit 0