Index: master/skia_notifier.py |
diff --git a/master/skia_notifier.py b/master/skia_notifier.py |
deleted file mode 100644 |
index eebaf6e1f13f9b35b0b1d428d9ea9167671e0696..0000000000000000000000000000000000000000 |
--- a/master/skia_notifier.py |
+++ /dev/null |
@@ -1,127 +0,0 @@ |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""A StatusReceiver module to mail someone when a step warns/fails. |
- |
-Since the behavior is very similar to the MailNotifier, we simply inherit from |
-it and also reuse some of its methods to send emails. |
-""" |
- |
-# This module comes from $(TOPLEVEL_DIR)/third_party/buildbot_<VERSION> , |
-# which must be in the PYTHONPATH. |
-from buildbot.status.mail import MailNotifier |
-from buildbot.status.results import Results |
-from master.try_mail_notifier import TryMailNotifier |
-from skia_master_scripts import utils |
- |
-import builder_name_schema |
-import datetime |
-import re |
-import urllib |
- |
- |
-_COMMIT_QUEUE_AUTHOR_LINE = 'Author: ' |
-_COMMIT_QUEUE_REVIEWERS_LINE = 'R=' |
-_COMMIT_BOT = 'commit-bot@chromium.org' |
- |
- |
-class SkiaNotifier(MailNotifier): |
- """This is Skia's status notifier.""" |
- |
- def __init__(self, **kwargs): |
- MailNotifier.__init__(self, **kwargs) |
- |
- def createEmail(self, msgdict, builderName, title, results, builds=None, |
- patches=None, logs=None): |
- # Trybots have their own Notifier |
- if builder_name_schema.IsTrybot(builderName): |
- return None |
- |
- m = MailNotifier.createEmail(self, msgdict, builderName, title, |
- results, builds, patches, logs) |
- |
- if builds and builds[0].getSourceStamp().revision: |
- m.replace_header('Subject', |
- 'buildbot %(result)s in %(title)s for %(revision)s' % { |
- 'result': Results[results], |
- 'title': title, |
- 'revision': builds[0].getSourceStamp().revision, |
- }) |
- return m |
- |
- def buildMessage(self, name, builds, results): |
- if self.sendToInterestedUsers and self.lookup: |
- |
- for build in builds: # Loop through all builds we are emailing about |
- if builder_name_schema.IsTrybot(build.getBuilder().name): |
- return |
- blame_list = set(build.getResponsibleUsers()) |
- for change in build.getChanges(): # Loop through all changes in a build |
- |
- if (change.comments and |
- _COMMIT_BOT == utils.FixGitSvnEmail(change.who)): |
- # If the change has been submitted by the commit bot then find the |
- # original author and the reviewers and add them to the blame list |
- for commit_queue_line in (_COMMIT_QUEUE_AUTHOR_LINE, |
- _COMMIT_QUEUE_REVIEWERS_LINE): |
- users = re.search( |
- '%s(.*?)\n' % commit_queue_line, |
- change.comments).group(1).split(',') |
- blame_list = blame_list.union(users) |
- if change.who in blame_list: |
- # Remove the commit bot from the blame list. |
- blame_list.remove(change.who) |
- |
- # Git-svn tacks a git-svn-id onto the email addresses. Remove it. |
- new_blamelist = [utils.FixGitSvnEmail(email) for email in blame_list] |
- |
- # pylint: disable=C0301 |
- # Set the extended blamelist. It was originally set in |
- # http://buildbot.net/buildbot/docs/0.8.4/reference/buildbot.process.build-pysrc.html |
- # (line 339) |
- build.setBlamelist(new_blamelist) |
- |
- return MailNotifier.buildMessage(self, name, builds, results) |
- |
- |
-def _ParseTimeStampFromURL(url): |
- """ Parse a timestamp from a diff-file url. |
- |
- url: string; the url from which to parse the timestamp. |
- """ |
- diff_file_name = urllib.unquote(url).split('/')[-1] |
- m = re.search('\S+\.\S+\.(\d+)-(\d+)-(\d+)\s(\d+)\.(\d+)\.(\d+)\.\d+\.diff', |
- diff_file_name) |
- |
- # If there are no matches or an incorrect number of matches, use the current |
- # date as a default. We don't include the time because that would result in |
- # many try result emails being sent with different subject lines. It is |
- # preferable to group all emails for the same changelist on the same day (even |
- # if they are from separate try requests). |
- expected_num_matches = 6 |
- if not m or len(m.groups()) != expected_num_matches: |
- now = datetime.datetime.now() |
- return '%s-%s-%s' % (now.year, now.month, now.day) |
- return '%s-%s-%s %s:%s:%s' % m.groups() |
- |
- |
-class SkiaTryMailNotifier(TryMailNotifier): |
- """ The TryMailNotifier sends mail for every build by default. Since we use |
- a single build master for both try builders and regular builders, this causes |
- mail to be sent for every single build. So, we subclass TryMailNotifier here |
- and add logic to prevent sending mail on anything but a try job. """ |
- |
- def buildMessage(self, name, build, results): |
- if builder_name_schema.IsTrybot(build[0].getBuilder().name): |
- if not hasattr(build[0].source, 'timestamp'): |
- if 'patch_file_url' in build[0].getProperties(): |
- build[0].source.timestamp = _ParseTimeStampFromURL( |
- build[0].getProperty('patch_file_url')) |
- subject = ( |
- 'try %(result)s for changelist "%(reason)s" at %(timestamp)s') |
- else: |
- subject = 'try %(result)s for issue-patchset "%(reason)s"' |
- # pylint: disable=W0201 |
- self.subject = subject |
- return TryMailNotifier.buildMessage(self, name, build, results) |