diff options
| author | Leo Famulari | 2017-01-13 10:21:17 -0500 |
|---|---|---|
| committer | Leo Famulari | 2017-01-13 10:21:17 -0500 |
| commit | cc0725914e74c4c4dec369f3e7cdb6f201b3fecd (patch) | |
| tree | e68b452ed625a2db8ed10914fb0968fdc36c655d /etc/git | |
| parent | a25b6880f1398ad36aea1d0e4e4105936a8b7e70 (diff) | |
| parent | ce195ba12277ec4286ad0d8ddf7294655987ea9d (diff) | |
Merge branch 'master' into python-tests
Diffstat (limited to 'etc/git')
| -rwxr-xr-x | etc/git/pre-push | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/etc/git/pre-push b/etc/git/pre-push new file mode 100755 index 000000000..c894c5a9e --- /dev/null +++ b/etc/git/pre-push @@ -0,0 +1,57 @@ +#!/bin/sh + +# This hook script prevents the user from pushing to Savannah if any of the new +# commits' OpenPGP signatures cannot be verified. + +# 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> + +z40=0000000000000000000000000000000000000000 + +# Only use the hook when pushing to Savannah. +case "$2" in +*git.sv.gnu.org*) + break + ;; +*) + exit 0 + ;; +esac + +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 + + # Verify the signatures of all commits being pushed. + git verify-commit $(git rev-list $range) >/dev/null 2>&1 + + exit $? + fi +done + +exit 0 |