Skip to content
Snippets Groups Projects
pre-push.sample 1.32 KiB
Newer Older
  • Learn to ignore specific revisions
  • WeiHsinChen's avatar
    plz
    WeiHsinChen committed
    #!/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"
    url="$2"
    
    z40=0000000000000000000000000000000000000000
    
    IFS=' '
    while read local_ref local_sha remote_ref remote_sha
    do
    	if [ "$local_sha" = $z40 ]
    	then
    		# Handle delete
    		:
    	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