distgit/pagure: drop a hotfix that is no longer needed
Signed-off-by: Pierre-Yves Chibon <pingou@pingoured.fr>
This commit is contained in:
parent
96500ac5ab
commit
43be9500bd
2 changed files with 0 additions and 368 deletions
|
@ -1,358 +0,0 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
"""
|
|
||||||
(c) 2016-2017 - Copyright Red Hat Inc
|
|
||||||
|
|
||||||
Authors:
|
|
||||||
Pierre-Yves Chibon <pingou@pingoured.fr>
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import unicode_literals, print_function, absolute_import
|
|
||||||
|
|
||||||
import logging
|
|
||||||
|
|
||||||
import pygit2
|
|
||||||
import six
|
|
||||||
|
|
||||||
import pagure.config
|
|
||||||
import pagure.exceptions
|
|
||||||
import pagure.lib.query
|
|
||||||
import pagure.lib.tasks
|
|
||||||
import pagure.lib.tasks_services
|
|
||||||
import pagure.utils
|
|
||||||
from pagure.hooks import BaseHook, BaseRunner
|
|
||||||
|
|
||||||
|
|
||||||
_config = pagure.config.reload_config()
|
|
||||||
_log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def send_fedmsg_notifications(project, topic, msg):
|
|
||||||
""" If the user or admin asked for fedmsg notifications on commit, this will
|
|
||||||
do it.
|
|
||||||
"""
|
|
||||||
|
|
||||||
fedmsg_hook = pagure.lib.plugins.get_plugin("Fedmsg")
|
|
||||||
fedmsg_hook.db_object()
|
|
||||||
|
|
||||||
always_fedmsg = _config.get("ALWAYS_FEDMSG_ON_COMMITS") or None
|
|
||||||
|
|
||||||
# Send fedmsg and fedora-messaging notification
|
|
||||||
# (if fedmsg and fedora-messaging are there and set-up)
|
|
||||||
if always_fedmsg or (project.fedmsg_hook and project.fedmsg_hook.active):
|
|
||||||
if _config.get("FEDMSG_NOTIFICATIONS", True):
|
|
||||||
try:
|
|
||||||
print(" - to fedmsg")
|
|
||||||
import fedmsg
|
|
||||||
|
|
||||||
config = fedmsg.config.load_config([], None)
|
|
||||||
config["active"] = True
|
|
||||||
config["endpoints"]["relay_inbound"] = config["relay_inbound"]
|
|
||||||
fedmsg.init(name="relay_inbound", **config)
|
|
||||||
|
|
||||||
pagure.lib.notify.fedmsg_publish(topic=topic, msg=msg)
|
|
||||||
except Exception:
|
|
||||||
_log.exception(
|
|
||||||
"Error sending fedmsg notifications on commit push"
|
|
||||||
)
|
|
||||||
|
|
||||||
if _config.get("FEDORA_MESSAGING_NOTIFICATIONS", False):
|
|
||||||
try:
|
|
||||||
print(" - to fedora-message")
|
|
||||||
pagure.lib.notify.fedora_messaging_publish(topic, msg)
|
|
||||||
except Exception:
|
|
||||||
_log.exception(
|
|
||||||
"Error sending fedora-messaging notifications on "
|
|
||||||
"commit push"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def send_stomp_notifications(project, topic, msg):
|
|
||||||
""" If the user or admin asked for stomp notifications on commit, this will
|
|
||||||
do it.
|
|
||||||
"""
|
|
||||||
always_stomp = _config.get("ALWAYS_STOMP_ON_COMMITS") or None
|
|
||||||
# Send stomp notification (if stomp is there and set-up)
|
|
||||||
if always_stomp or (project.fedmsg_hook and project.fedmsg_hook.active):
|
|
||||||
try:
|
|
||||||
print(" - to stomp")
|
|
||||||
pagure.lib.notify.stomp_publish(topic, msg)
|
|
||||||
except Exception:
|
|
||||||
_log.exception("Error sending stomp notifications on commit push")
|
|
||||||
|
|
||||||
|
|
||||||
def send_mqtt_notifications(project, topic, msg):
|
|
||||||
""" If the user or admin asked for mqtt notifications on commit, this will
|
|
||||||
do it.
|
|
||||||
"""
|
|
||||||
always_mqtt = _config.get("ALWAYS_MQTT_ON_COMMITS") or None
|
|
||||||
# Send mqtt notification (if mqtt is there and set-up)
|
|
||||||
if always_mqtt or (project.fedmsg_hook and project.fedmsg_hook.active):
|
|
||||||
try:
|
|
||||||
print(" - to mqtt")
|
|
||||||
pagure.lib.notify.mqtt_publish(topic, msg)
|
|
||||||
except Exception:
|
|
||||||
_log.exception("Error sending stomp notifications on commit push")
|
|
||||||
|
|
||||||
|
|
||||||
def send_webhook_notifications(project, topic, msg):
|
|
||||||
""" If the user asked for webhook notifications on commit, this will
|
|
||||||
do it.
|
|
||||||
"""
|
|
||||||
if project.settings.get("Web-hooks"):
|
|
||||||
try:
|
|
||||||
print(" - to web-hooks")
|
|
||||||
pagure.lib.tasks_services.webhook_notification.delay(
|
|
||||||
topic=topic,
|
|
||||||
msg=msg,
|
|
||||||
namespace=project.namespace,
|
|
||||||
name=project.name,
|
|
||||||
user=project.user.username if project.is_fork else None,
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
_log.exception(
|
|
||||||
"Error sending web-hook notifications on commit push"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def send_notifications(session, project, repodir, user, refname, revs, forced):
|
|
||||||
""" Send out-going notifications about the commits that have just been
|
|
||||||
pushed.
|
|
||||||
"""
|
|
||||||
|
|
||||||
auths = set()
|
|
||||||
for rev in revs:
|
|
||||||
email = pagure.lib.git.get_author_email(rev, repodir)
|
|
||||||
name = pagure.lib.git.get_author(rev, repodir)
|
|
||||||
author = pagure.lib.query.search_user(session, email=email) or name
|
|
||||||
auths.add(author)
|
|
||||||
|
|
||||||
authors = []
|
|
||||||
for author in auths:
|
|
||||||
if not isinstance(author, six.string_types):
|
|
||||||
author = author.to_json(public=True)
|
|
||||||
authors.append(author)
|
|
||||||
|
|
||||||
if revs:
|
|
||||||
revs.reverse()
|
|
||||||
print("* Publishing information for %i commits" % len(revs))
|
|
||||||
|
|
||||||
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=user,
|
|
||||||
repo=project.to_json(public=True)
|
|
||||||
if not isinstance(project, six.string_types)
|
|
||||||
else project,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Send blink notification to any 3rd party plugins, if there are any
|
|
||||||
pagure.lib.notify.blinker_publish(topic, msg)
|
|
||||||
|
|
||||||
if not project.private:
|
|
||||||
send_fedmsg_notifications(project, topic, msg)
|
|
||||||
send_stomp_notifications(project, topic, msg)
|
|
||||||
send_mqtt_notifications(project, topic, msg)
|
|
||||||
send_webhook_notifications(project, topic, msg)
|
|
||||||
|
|
||||||
if (
|
|
||||||
_config.get("PAGURE_CI_SERVICES")
|
|
||||||
and project.ci_hook
|
|
||||||
and project.ci_hook.active_commit
|
|
||||||
and not project.private
|
|
||||||
):
|
|
||||||
pagure.lib.tasks_services.trigger_ci_build.delay(
|
|
||||||
project_name=project.fullname,
|
|
||||||
cause=revs[-1],
|
|
||||||
branch=refname,
|
|
||||||
ci_type=project.ci_hook.ci_type,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def inform_pull_request_urls(
|
|
||||||
session, project, commits, refname, default_branch
|
|
||||||
):
|
|
||||||
""" Inform the user about the URLs to open a new pull-request or visit
|
|
||||||
the existing one.
|
|
||||||
"""
|
|
||||||
target_repo = project
|
|
||||||
if project.is_fork:
|
|
||||||
target_repo = project.parent
|
|
||||||
|
|
||||||
pr_uids = []
|
|
||||||
|
|
||||||
if (
|
|
||||||
commits
|
|
||||||
and refname != default_branch
|
|
||||||
and target_repo.settings.get("pull_requests", True)
|
|
||||||
):
|
|
||||||
print()
|
|
||||||
prs = pagure.lib.query.search_pull_requests(
|
|
||||||
session,
|
|
||||||
project_id_from=target_repo.id,
|
|
||||||
status="Open",
|
|
||||||
branch_from=refname,
|
|
||||||
)
|
|
||||||
if project.id != target_repo.id:
|
|
||||||
prs.extend(
|
|
||||||
pagure.lib.query.search_pull_requests(
|
|
||||||
session,
|
|
||||||
project_id_from=project.id,
|
|
||||||
status="Open",
|
|
||||||
branch_from=refname,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# Link to existing PRs if there are any
|
|
||||||
seen = len(prs) != 0
|
|
||||||
for pr in prs:
|
|
||||||
# Refresh the PR in the db and everywhere else where needed
|
|
||||||
pagure.lib.tasks.update_pull_request.delay(pr.uid)
|
|
||||||
|
|
||||||
# Link tickets with pull-requests if the commit mentions it
|
|
||||||
pagure.lib.tasks.link_pr_to_ticket.delay(pr.uid)
|
|
||||||
|
|
||||||
# Inform the user about the PR
|
|
||||||
print("View pull-request for %s" % refname)
|
|
||||||
print(
|
|
||||||
" %s/%s/pull-request/%s"
|
|
||||||
% (_config["APP_URL"].rstrip("/"), pr.project.url_path, pr.id)
|
|
||||||
)
|
|
||||||
pr_uids.append(pr.uid)
|
|
||||||
|
|
||||||
# If no existing PRs, provide the link to open one
|
|
||||||
if not seen:
|
|
||||||
print("Create a pull-request for %s" % refname)
|
|
||||||
print(
|
|
||||||
" %s/%s/diff/%s..%s"
|
|
||||||
% (
|
|
||||||
_config["APP_URL"].rstrip("/"),
|
|
||||||
project.url_path,
|
|
||||||
default_branch,
|
|
||||||
refname,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
print()
|
|
||||||
|
|
||||||
return pr_uids
|
|
||||||
|
|
||||||
|
|
||||||
class DefaultRunner(BaseRunner):
|
|
||||||
""" Runner for the default hook."""
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def post_receive(session, username, project, repotype, repodir, changes):
|
|
||||||
""" Run the default post-receive hook.
|
|
||||||
|
|
||||||
For args, see BaseRunner.runhook.
|
|
||||||
"""
|
|
||||||
if repotype != "main":
|
|
||||||
if _config.get("HOOK_DEBUG", False):
|
|
||||||
print("Default hook only runs on the main project repository")
|
|
||||||
return
|
|
||||||
|
|
||||||
if changes:
|
|
||||||
# Retrieve the default branch
|
|
||||||
repo_obj = pygit2.Repository(repodir)
|
|
||||||
default_branch = None
|
|
||||||
if not repo_obj.is_empty and not repo_obj.head_is_unborn:
|
|
||||||
default_branch = repo_obj.head.shorthand
|
|
||||||
|
|
||||||
pr_uids = []
|
|
||||||
|
|
||||||
for refname in changes:
|
|
||||||
(oldrev, newrev) = changes[refname]
|
|
||||||
|
|
||||||
forced = False
|
|
||||||
if set(newrev) == set(["0"]):
|
|
||||||
print(
|
|
||||||
"Deleting a reference/branch, so we won't run the "
|
|
||||||
"pagure hook"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
elif set(oldrev) == set(["0"]):
|
|
||||||
oldrev = "^%s" % oldrev
|
|
||||||
elif pagure.lib.git.is_forced_push(oldrev, newrev, repodir):
|
|
||||||
forced = True
|
|
||||||
base = pagure.lib.git.get_base_revision(
|
|
||||||
oldrev, newrev, repodir
|
|
||||||
)
|
|
||||||
if base:
|
|
||||||
oldrev = base[0]
|
|
||||||
|
|
||||||
refname = refname.replace("refs/heads/", "")
|
|
||||||
commits = pagure.lib.git.get_revs_between(
|
|
||||||
oldrev, newrev, repodir, refname
|
|
||||||
)
|
|
||||||
|
|
||||||
log_all = _config.get("LOG_ALL_COMMITS", False)
|
|
||||||
if log_all or refname == default_branch:
|
|
||||||
print(
|
|
||||||
"Sending to redis to log activity and send commit "
|
|
||||||
"notification emails"
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
print("Sending to redis to send commit notification emails")
|
|
||||||
|
|
||||||
# This is logging the commit to the log table in the DB so we can
|
|
||||||
# render commits in the calendar heatmap.
|
|
||||||
# It is also sending emails about commits to people using the
|
|
||||||
# 'watch' feature to be made aware of new commits.
|
|
||||||
pagure.lib.tasks_services.log_commit_send_notifications.delay(
|
|
||||||
name=project.name,
|
|
||||||
commits=commits,
|
|
||||||
abspath=repodir,
|
|
||||||
branch=refname,
|
|
||||||
default_branch=default_branch,
|
|
||||||
namespace=project.namespace,
|
|
||||||
username=project.user.user if project.is_fork else None,
|
|
||||||
)
|
|
||||||
|
|
||||||
# This one is sending fedmsg and web-hook notifications for project
|
|
||||||
# that set them up
|
|
||||||
send_notifications(
|
|
||||||
session, project, repodir, username, refname, commits, forced
|
|
||||||
)
|
|
||||||
|
|
||||||
# Now display to the user if this isn't the default branch links to
|
|
||||||
# open a new pr or review the existing one
|
|
||||||
pr_uids.extend(
|
|
||||||
inform_pull_request_urls(
|
|
||||||
session, project, commits, refname, default_branch
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Refresh of all opened PRs
|
|
||||||
parent = project.parent or project
|
|
||||||
pagure.lib.tasks.refresh_pr_cache.delay(
|
|
||||||
parent.name,
|
|
||||||
parent.namespace,
|
|
||||||
parent.user.user if parent.is_fork else None,
|
|
||||||
but_uids=pr_uids,
|
|
||||||
)
|
|
||||||
|
|
||||||
if not project.is_on_repospanner and _config.get(
|
|
||||||
"GIT_GARBAGE_COLLECT", False
|
|
||||||
):
|
|
||||||
pagure.lib.tasks.git_garbage_collect.delay(
|
|
||||||
project.repopath("main")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class Default(BaseHook):
|
|
||||||
""" Default hooks. """
|
|
||||||
|
|
||||||
name = "default"
|
|
||||||
description = (
|
|
||||||
"Default hooks that should be enabled for each and every project."
|
|
||||||
)
|
|
||||||
runner = DefaultRunner
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def is_enabled_for(cls, project):
|
|
||||||
return True
|
|
|
@ -439,13 +439,3 @@
|
||||||
tags:
|
tags:
|
||||||
- pagure
|
- pagure
|
||||||
- logrotate
|
- logrotate
|
||||||
|
|
||||||
|
|
||||||
- name: hotfix the default hook so it updates pending PR async
|
|
||||||
copy: >
|
|
||||||
src=hotfix-20190227-hooks-default.py
|
|
||||||
dest=/usr/lib/python2.7/site-packages/pagure/hooks/default.py
|
|
||||||
owner=root group=root mode=0644
|
|
||||||
tags:
|
|
||||||
- hotfix
|
|
||||||
- pagure
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue