95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
|
#!/usr/bin/env python
|
||
|
|
||
|
import getpass
|
||
|
import os
|
||
|
import subprocess
|
||
|
import sys
|
||
|
|
||
|
from collections import defaultdict
|
||
|
|
||
|
import fedmsg
|
||
|
import fedmsg.config
|
||
|
|
||
|
|
||
|
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.lib.git
|
||
|
|
||
|
abspath = os.path.abspath(os.environ['GIT_DIR'])
|
||
|
|
||
|
|
||
|
print "Emitting a message to the fedmsg bus."
|
||
|
config = fedmsg.config.load_config([], None)
|
||
|
config['active'] = True
|
||
|
config['endpoints']['relay_inbound'] = config['relay_inbound']
|
||
|
fedmsg.init(name='relay_inbound', **config)
|
||
|
|
||
|
|
||
|
seen = []
|
||
|
|
||
|
# Read in all the rev information git-receive-pack hands us.
|
||
|
for line in sys.stdin.readlines():
|
||
|
(oldrev, newrev, refname) = line.strip().split(' ', 2)
|
||
|
|
||
|
forced = False
|
||
|
if set(newrev) == set(['0']):
|
||
|
print "Deleting a reference/branch, so we won't run the "\
|
||
|
"pagure hook"
|
||
|
break
|
||
|
elif set(oldrev) == set(['0']):
|
||
|
print "New reference/branch"
|
||
|
oldrev = '^%s' % oldrev
|
||
|
elif pagure.lib.git.is_forced_push(oldrev, newrev, abspath):
|
||
|
forced = True
|
||
|
base = pagure.lib.git.get_base_revision(oldrev, newrev, abspath)
|
||
|
if base:
|
||
|
oldrev = base[0]
|
||
|
|
||
|
revs = pagure.lib.git.get_revs_between(
|
||
|
oldrev, newrev, abspath, refname, forced=forced)
|
||
|
|
||
|
project_name = pagure.lib.git.get_repo_name(abspath)
|
||
|
username = pagure.lib.git.get_username(abspath)
|
||
|
namespace = pagure.lib.git.get_repo_namespace(abspath)
|
||
|
project = pagure.lib.get_project(
|
||
|
pagure.SESSION, project_name, username, namespace=namespace)
|
||
|
if not project:
|
||
|
project = project_name
|
||
|
|
||
|
auths = set()
|
||
|
for rev in revs:
|
||
|
email = pagure.lib.git.get_author_email(rev, abspath)
|
||
|
name = pagure.lib.git.get_author(rev, abspath)
|
||
|
author = pagure.lib.search_user(pagure.SESSION, email=email) or name
|
||
|
auths.add(author)
|
||
|
|
||
|
authors = []
|
||
|
for author in auths:
|
||
|
if isinstance(author, basestring):
|
||
|
author = author
|
||
|
else:
|
||
|
author = author.to_json(public=True)
|
||
|
authors.append(author)
|
||
|
|
||
|
if revs:
|
||
|
revs.reverse()
|
||
|
print "* Publishing information for %i commits" % len(revs)
|
||
|
pagure.lib.notify.log(
|
||
|
project=project,
|
||
|
topic="git.receive",
|
||
|
msg=dict(
|
||
|
total_commits=len(revs),
|
||
|
start_commit=revs[0],
|
||
|
end_commit=revs[-1],
|
||
|
branch=refname,
|
||
|
forced=forced,
|
||
|
authors=list(authors),
|
||
|
agent=os.environ['GL_USER'],
|
||
|
repo=project.to_json(public=True)
|
||
|
if not isinstance(project, basestring) else project,
|
||
|
),
|
||
|
)
|