pagure-new/pagure/hooks/files/pagure_block_unsigned.py

73 lines
2 KiB
Python
Executable file

#! /usr/bin/env python2
"""Pagure specific hook to block commit not having a 'Signed-off-by'
statement.
"""
import os
import sys
from sqlalchemy.exc import SQLAlchemyError
import sys
sys.path.insert(0, '/home/pierrey/repos/gitrepo/pagure/')
if 'PAGURE_CONFIG' not in os.environ \
and os.path.exists('/etc/pagure/pagure.cfg'):
os.environ['PAGURE_CONFIG'] = '/etc/pagure/pagure.cfg'
import pagure
import pagure.exceptions
import pagure.lib.link
import pagure.ui.plugins
abspath = os.path.abspath(os.environ['GIT_DIR'])
def run_as_pre_receive_hook():
for line in sys.stdin:
if pagure.APP.config.get('HOOK_DEBUG', False):
print line
(oldrev, newrev, refname) = line.strip().split(' ', 2)
if pagure.APP.config.get('HOOK_DEBUG', False):
print ' -- Old rev'
print oldrev
print ' -- New rev'
print newrev
print ' -- Ref name'
print refname
if set(newrev) == set(['0']):
print "Deleting a reference/branch, so we won't run the "\
"hook to block unsigned commits"
return
commits = pagure.lib.git.get_revs_between(
oldrev, newrev, abspath, refname)
for commit in commits:
if pagure.APP.config.get('HOOK_DEBUG', False):
print 'Processing commit: %s' % commit
signed = False
for line in pagure.lib.git.read_git_lines(
['log', '--no-walk', commit], abspath):
if line.lower().strip().startswith('signed-off-by'):
signed = True
break
if pagure.APP.config.get('HOOK_DEBUG', False):
print ' - Commit: %s is signed: %s' % (commit, signed)
if not signed:
print "Commit %s is not signed" % commit
sys.exit(1)
def main(args):
run_as_pre_receive_hook()
if __name__ == '__main__':
main(sys.argv[1:])