From 9e5f51c951c6cab20fe81419320ed740533e2f2f Mon Sep 17 00:00:00 2001 From: Fabien Boucher Date: Sep 26 2019 07:51:02 +0000 Subject: [PATCH 1/2] Add revision along with tag/branch creation/deletion The git.tag.creation event does not propagate the newrev making it difficult to be interpreted by other tools like Zuul. This patch adds the rev info to that notification payload but also to branch events. --- diff --git a/pagure/hooks/default.py b/pagure/hooks/default.py index bc1a8df..023f9b9 100644 --- a/pagure/hooks/default.py +++ b/pagure/hooks/default.py @@ -125,7 +125,7 @@ def send_webhook_notifications(project, topic, msg): def send_action_notification( session, subject, action, project, repodir, user, refname, rev ): - """ Send out-going notifications about the branch that was just deleted. + """ Send out-going notifications about the branch/tag. """ email = pagure.lib.git.get_author_email(rev, repodir) name = pagure.lib.git.get_author(rev, repodir) @@ -145,8 +145,10 @@ def send_action_notification( ) if subject == "branch": msg["branch"] = refname + msg["rev"] = rev elif subject == "tag": msg["tag"] = refname + msg["rev"] = rev # Send blink notification to any 3rd party plugins, if there are any pagure.lib.notify.blinker_publish(topic, msg) diff --git a/tests/test_pagure_send_notification.py b/tests/test_pagure_send_notification.py new file mode 100644 index 0000000..40b7b76 --- /dev/null +++ b/tests/test_pagure_send_notification.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- + +""" + (c) 2019 - Copyright Red Hat Inc + + Authors: + Fabien Boucher + +""" + +import unittest +import sys +import os + +sys.path.insert( + 0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..") +) + +import mock +import pygit2 + +import pagure.hooks.default +import tests + + +class PagureHooksDefault(tests.SimplePagureTest): + """ Tests for pagure.hooks.default """ + + def setUp(self): + """ Set up the environnment, ran before every tests. """ + super(PagureHooksDefault, self).setUp() + tests.create_projects(self.session) + self.projects = tests.create_projects_git( + os.path.join(self.path, "repos"), bare=True) + self.folder = os.path.join(self.path, "repos", "test.git") + + def init_test_repo(self): + tests.add_content_git_repo(self.projects[0]) + repo = pygit2.Repository(self.projects[0]) + sha = repo.references["refs/heads/master"].peel().hex + project = pagure.lib.query.get_authorized_project( + self.session, "test") + return project, sha + + @mock.patch("pagure.hooks.default.send_fedmsg_notifications") + def test_send_action_notification( + self, fedmsg): + project, sha = self.init_test_repo() + pagure.hooks.default.send_action_notification( + self.session, "tag", "bar", + project, self.folder, "pingou", "master", sha) + (_, args, kwargs) = fedmsg.mock_calls[0] + self.assertEqual(args[1], 'git.tag.bar') + self.assertEqual(args[2]['repo']['name'], 'test') + self.assertEqual(args[2]['rev'], sha) + + @mock.patch("pagure.hooks.default.send_fedmsg_notifications") + def test_send_notifications( + self, fedmsg): + project, sha = self.init_test_repo() + pagure.hooks.default.send_notifications( + self.session, project, self.folder, + "pingou", "master", [sha], False) + (_, args, kwargs) = fedmsg.mock_calls[0] + self.assertEqual(args[1], 'git.receive') + self.assertEqual(args[2]['repo']['name'], 'test') + self.assertEqual(args[2]['start_commit'], sha) + self.assertEqual(args[2]['forced'], False) + + +if __name__ == "__main__": + unittest.main(verbosity=2) From 4bfc07b1219fe844f7eb6201d5e9bf671e16ed77 Mon Sep 17 00:00:00 2001 From: Fabien Boucher Date: Sep 26 2019 07:51:02 +0000 Subject: [PATCH 2/2] black fix --- diff --git a/tests/test_pagure_send_notification.py b/tests/test_pagure_send_notification.py index 40b7b76..7ea884b 100644 --- a/tests/test_pagure_send_notification.py +++ b/tests/test_pagure_send_notification.py @@ -31,41 +31,52 @@ class PagureHooksDefault(tests.SimplePagureTest): super(PagureHooksDefault, self).setUp() tests.create_projects(self.session) self.projects = tests.create_projects_git( - os.path.join(self.path, "repos"), bare=True) + os.path.join(self.path, "repos"), bare=True + ) self.folder = os.path.join(self.path, "repos", "test.git") def init_test_repo(self): tests.add_content_git_repo(self.projects[0]) repo = pygit2.Repository(self.projects[0]) sha = repo.references["refs/heads/master"].peel().hex - project = pagure.lib.query.get_authorized_project( - self.session, "test") + project = pagure.lib.query.get_authorized_project(self.session, "test") return project, sha @mock.patch("pagure.hooks.default.send_fedmsg_notifications") - def test_send_action_notification( - self, fedmsg): + def test_send_action_notification(self, fedmsg): project, sha = self.init_test_repo() pagure.hooks.default.send_action_notification( - self.session, "tag", "bar", - project, self.folder, "pingou", "master", sha) + self.session, + "tag", + "bar", + project, + self.folder, + "pingou", + "master", + sha, + ) (_, args, kwargs) = fedmsg.mock_calls[0] - self.assertEqual(args[1], 'git.tag.bar') - self.assertEqual(args[2]['repo']['name'], 'test') - self.assertEqual(args[2]['rev'], sha) + self.assertEqual(args[1], "git.tag.bar") + self.assertEqual(args[2]["repo"]["name"], "test") + self.assertEqual(args[2]["rev"], sha) @mock.patch("pagure.hooks.default.send_fedmsg_notifications") - def test_send_notifications( - self, fedmsg): + def test_send_notifications(self, fedmsg): project, sha = self.init_test_repo() pagure.hooks.default.send_notifications( - self.session, project, self.folder, - "pingou", "master", [sha], False) + self.session, + project, + self.folder, + "pingou", + "master", + [sha], + False, + ) (_, args, kwargs) = fedmsg.mock_calls[0] - self.assertEqual(args[1], 'git.receive') - self.assertEqual(args[2]['repo']['name'], 'test') - self.assertEqual(args[2]['start_commit'], sha) - self.assertEqual(args[2]['forced'], False) + self.assertEqual(args[1], "git.receive") + self.assertEqual(args[2]["repo"]["name"], "test") + self.assertEqual(args[2]["start_commit"], sha) + self.assertEqual(args[2]["forced"], False) if __name__ == "__main__":