pre-push (1664B)
1 #!/bin/sh 2 3 # Based on https://gist.github.com/Quintok/815396509ff79d886656b2855e1a8a46 4 5 # A pre-push hook based on the git template. This will verify that no WIP or 6 # autosquash commits are present. If such a commit is present, pushing will not 7 # be possible. 8 9 # This hook is called with the following parameters: 10 # 11 # $1 -- Name of the remote to which the push is being done 12 # $2 -- URL to which the push is being done 13 # 14 # If pushing without using a named remote those arguments will be equal. 15 # 16 # Information about the commits which are being pushed is supplied as lines to 17 # the standard input in the form: 18 # 19 # <local ref> <local sha1> <remote ref> <remote sha1> 20 21 z40=0000000000000000000000000000000000000000 22 23 IFS=' ' 24 while read -r local_ref local_sha remote_ref remote_sha 25 do 26 echo "$remote_ref" > /dev/null 27 28 if [ "$local_sha" = $z40 ] 29 then 30 # Ignore delete 31 : 32 else 33 if [ "$remote_sha" = $z40 ] 34 then 35 # New branch, examine all commits since master 36 range="$(git merge-base $local_sha master)..$local_sha" 37 else 38 # Update to existing branch, examine new commits 39 range="$remote_sha..$local_sha" 40 fi 41 42 # Check for WIP commits 43 commit=$(git rev-list -n 1 --grep '^WIP' "$range") 44 if [ "${local_ref}" = refs/heads/master ] && [ -n "$commit" ] 45 then 46 printf "\nPush rejected: WIP commit detected\n\n" 47 exit 1 48 fi 49 50 # Check for autosquash commits 51 commit=$(git rev-list -n 1 --grep '^\(fixup\|squash\)!' "$range") 52 if [ -n "$commit" ] 53 then 54 printf "\nPush rejected: autosquash commit detected\n\n" 55 exit 1 56 fi 57 fi 58 done 59 60 # Local Variables: 61 # sh-basic-offset: 2 62 # End: