Blame pagure/hooks/files/fedmsg_hook.py

Pierre-Yves Chibon 4cce24
#!/usr/bin/env python
Pierre-Yves Chibon 4cce24
Vadim Rutkovsky 9b6a62
from __future__ import print_function
Vadim Rutkovsky 9b6a62
Pierre-Yves Chibon 4cce24
import os
Pierre-Yves Chibon 4cce24
import sys
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
import fedmsg
Pierre-Yves Chibon 4cce24
import fedmsg.config
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon fe08db
Pierre-Yves Chibon fe08db
if 'PAGURE_CONFIG' not in os.environ \
Pierre-Yves Chibon fe08db
        and os.path.exists('/etc/pagure/pagure.cfg'):
Pierre-Yves Chibon fe08db
    os.environ['PAGURE_CONFIG'] = '/etc/pagure/pagure.cfg'
Pierre-Yves Chibon fe08db
Pierre-Yves Chibon 4edf24
Pierre-Yves Chibon de6f12
import pagure  # noqa: E402
Pierre-Yves Chibon de6f12
import pagure.lib.git  # noqa: E402
Pierre-Yves Chibon fe08db
Pierre-Yves Chibon 4cce24
abspath = os.path.abspath(os.environ['GIT_DIR'])
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon fe08db
Vadim Rutkovsky 9b6a62
print("Emitting a message to the fedmsg bus.")
Pierre-Yves Chibon 4cce24
config = fedmsg.config.load_config([], None)
Pierre-Yves Chibon 4cce24
config['active'] = True
Pierre-Yves Chibon 4cce24
config['endpoints']['relay_inbound'] = config['relay_inbound']
Pierre-Yves Chibon c26108
fedmsg.init(name='relay_inbound', **config)
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon b130e5
_config = pagure.config.config.reload_config()
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
seen = []
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 4cce24
# Read in all the rev information git-receive-pack hands us.
Pierre-Yves Chibon fe08db
for line in sys.stdin.readlines():
Pierre-Yves Chibon fe08db
    (oldrev, newrev, refname) = line.strip().split(' ', 2)
Pierre-Yves Chibon c43f06
Pierre-Yves Chibon 72398f
    forced = False
Pierre-Yves Chibon 33b2ee
    if set(newrev) == set(['0']):
Vadim Rutkovsky 9b6a62
        print("Deleting a reference/branch, so we won't run the "
Vadim Rutkovsky 9b6a62
              "pagure hook")
Pierre-Yves Chibon daf4ee
        break
Pierre-Yves Chibon d75ae7
    elif set(oldrev) == set(['0']):
Vadim Rutkovsky 9b6a62
        print("New reference/branch")
Pierre-Yves Chibon d75ae7
        oldrev = '^%s' % oldrev
Pierre-Yves Chibon daf4ee
    elif pagure.lib.git.is_forced_push(oldrev, newrev, abspath):
Pierre-Yves Chibon 72398f
        forced = True
Pierre-Yves Chibon daf4ee
        base = pagure.lib.git.get_base_revision(oldrev, newrev, abspath)
Pierre-Yves Chibon daf4ee
        if base:
Pierre-Yves Chibon daf4ee
            oldrev = base[0]
Pierre-Yves Chibon c43f06
Pierre-Yves Chibon 72398f
    revs = pagure.lib.git.get_revs_between(
Clement Verna bdd561
        oldrev, newrev, abspath, refname, forced=forced)
Pierre-Yves Chibon 08f92e
Pierre-Yves Chibon 1a079d
    project_name = pagure.lib.git.get_repo_name(abspath)
Pierre-Yves Chibon 1a079d
    username = pagure.lib.git.get_username(abspath)
Pierre-Yves Chibon 08f92e
    namespace = pagure.lib.git.get_repo_namespace(abspath)
Pierre-Yves Chibon c50e81
    project = pagure.lib._get_project(
Pierre-Yves Chibon edbdc9
        pagure.SESSION, project_name, username, namespace=namespace,
Pierre-Yves Chibon b130e5
        case=_config.get('CASE_SENSITIVE', False))
Pierre-Yves Chibon edbdc9
Pierre-Yves Chibon 1a079d
    if not project:
Pierre-Yves Chibon 1a079d
        project = project_name
Pierre-Yves Chibon 4cce24
Pierre-Yves Chibon 700c33
    auths = set()
Pierre-Yves Chibon 4611fe
    for rev in revs:
Pierre-Yves Chibon 00d774
        email = pagure.lib.git.get_author_email(rev, abspath)
Pierre-Yves Chibon 00d774
        name = pagure.lib.git.get_author(rev, abspath)
Pierre-Yves Chibon c8fa3b
        author = pagure.lib.search_user(pagure.SESSION, email=email) or name
Pierre-Yves Chibon 700c33
        auths.add(author)
Pierre-Yves Chibon 700c33
Pierre-Yves Chibon 700c33
    authors = []
Pierre-Yves Chibon 700c33
    for author in auths:
Pierre-Yves Chibon 700c33
        if isinstance(author, basestring):
Pierre-Yves Chibon 700c33
            author = author
Pierre-Yves Chibon 700c33
        else:
Pierre-Yves Chibon 700c33
            author = author.to_json(public=True)
Pierre-Yves Chibon 700c33
        authors.append(author)
Pierre-Yves Chibon 4611fe
Pierre-Yves Chibon 95c17c
    if revs:
Pierre-Yves Chibon 95c17c
        revs.reverse()
Vadim Rutkovsky 9b6a62
        print("* Publishing information for %i commits" % len(revs))
Pierre-Yves Chibon 0f173e
        pagure.lib.notify.log(
Pierre-Yves Chibon 0f173e
            project=project,
Pierre-Yves Chibon 0f173e
            topic="git.receive",
Pierre-Yves Chibon be5513
            msg=dict(
Pierre-Yves Chibon 95c17c
                total_commits=len(revs),
Pierre-Yves Chibon 95c17c
                start_commit=revs[0],
Pierre-Yves Chibon 95c17c
                end_commit=revs[-1],
Pierre-Yves Chibon be5513
                branch=refname,
Pierre-Yves Chibon be5513
                forced=forced,
Pierre-Yves Chibon 52a441
                authors=list(authors),
Pierre-Yves Chibon a22558
                agent=os.environ['GL_USER'],
Pierre-Yves Chibon c84343
                repo=project.to_json(public=True)
Pierre-Yves Chibon c84343
                if not isinstance(project, basestring) else project,
Pierre-Yves Chibon be5513
            ),
Pierre-Yves Chibon 4edf24
            redis=pagure.lib.REDIS,
Pierre-Yves Chibon 4cce24
        )