diff options
Diffstat (limited to 'loginfo-consumer')
-rwxr-xr-x | loginfo-consumer | 56 |
1 files changed, 47 insertions, 9 deletions
diff --git a/loginfo-consumer b/loginfo-consumer index edab648..15ca8cd 100755 --- a/loginfo-consumer +++ b/loginfo-consumer @@ -65,8 +65,44 @@ def append_package_owner_email(directory, recipients): package_match = package_re.match(directory) if package_match and package_match.group(1): - recipients.append('%s-owner@fedoraproject.org' % package_match.group(1)) - + recipients.add('%s-owner@fedoraproject.org' % package_match.group(1)) + + +directory_based_notifications = [(re.compile(r'^rpms'), [append_package_owner_email, + 'cvsextras@fedoraproject.org']), + (re.compile(r'^devel'), [append_package_owner_email, + 'cvsextras@fedoraproject.org']), + (re.compile(r'^common'), ['cvsextras@fedoraproject.org', + 'jkeating@redhat.com']), + (re.compile(r'^owners'), ['cvsextras@fedoraproject.org', + 'cvsadmin-menbers@fedoraproject.org']), + (re.compile(r'^comps'), ['cvsextras@fedoraproject.org', + 'katzj@redhat.com', + 'notting@redhat.com', + 'jkeating@redhat.com'])] + +message_based_notifications = [(re.compile(r'docs'), ['relnotes@fedoraproject.org'])] + +def process_notifications(directory, message, recipients, notifications): + for notification in notifications: + if isinstance(notification, basestring): + recipients.add(notification) + elif callable(notification): + notification(directory, message, recipients) + +def compute_directory_based_notifications(directory, message, recipients): + for pattern, notifications in directory_based_notifications: + match = pattern.match(directory) + if match: + process_notifications(directory, message, recipients, notifications) + + +def compute_message_based_notifications(directory, message, email_recipient_set): + for pattern, notifications in message_based_notifications: + match = pattern.search(message) + if match: + process_notifications(directory, message, recipients, notifications) + host = '127.0.0.1' port = 5672 @@ -119,13 +155,15 @@ while True: # build the list of recipients - email_recipients = [] - for notification_element in root_element.xpath('/loginfo/notifications/notification'): - notification = notification_element.text - if notification == u'%%OWNER%%': - append_package_owner_email(directory, email_recipients) - else: - email_recipients.append(notification) + recipients = set() + compute_directory_based_notifications(directory, message, recipients) + compute_message_based_notifications(directory, message, recipients) + + if len(recipients) == 0: + recipients.add('admin@fedoraproject.org') + + email_recipients = list(recipients) + email_recipients.sort() # Build the email object |