#!/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).

remote="$1"
django_origin="origin"
if [ "$remote" != "$django_origin" ]
then
    # Not dealing with django-origin, so don't do anythin
    return 0
fi
url="$2"

z40=0000000000000000000000000000000000000000

IFS=' '
while read local_ref local_sha remote_ref remote_sha
do
	if [ "$local_sha" = $z40 ]
	then
                echo "Seems like a delete of a django-origin branch. Use --no-verify if you really want to do that."
                exit 1
	else
		if [ "$remote_sha" = $z40 ]
		then
			# New branch, examine all commits
                        echo "Seems like you are trying to push a new branch to upstream. Use --no-verify if you really want to do that."
                        exit 1
                fi

                # Check the range, if it is empty this is likely a force-push (no idea why)
		commit=`git rev-list "$local_sha" |grep "$remote_sha"`
                if [ -z "$commit" ]
                then
                    echo "This seems like force-push to upstream. Use --no-verify if you really want to do that. HINT: you don't!"
                    exit 1
                fi
	fi
done

exit 0
