Aaron Schrab <aaron@xxxxxxxxxx> writes: > 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@xxxxxxxxxx> > --- > 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. > +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? > + 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html