diff --git a/master.cfg b/master.cfg index a271008..9c8dcb6 100644 --- a/master.cfg +++ b/master.cfg @@ -27,6 +27,7 @@ from urllib import quote from sumfiles import DejaResults, set_web_base import os +import glob import urllib from json import load import re @@ -203,8 +204,8 @@ def SendRootMessageGDBTesters (branch, change, rev, s.sendmail (GDB_MAIL_FROM, [ mailto ], mail.as_string ()) s.quit () -def make_breakage_lockfile_name (builder, branch): - return "/tmp/gdb-buildbot-breakage-report-%s-%s" % (branch, builder) +def make_breakage_lockfile_name (builder, branch, commit): + return "/tmp/gdb-buildbot-breakage-report-%s-%s-%s" % (commit, branch, builder) def SendAuthorMessage (name, branch, change, text_prepend): """Send a message to the author of the commit if it broke GDB. @@ -214,13 +215,19 @@ people. This may happen, for example, if a commit X breaks GDB, but subsequent commits are made after X, by different people.""" global GDB_MAIL_FROM - lockfile = make_breakage_lockfile_name (name, branch) + lockfile = make_breakage_lockfile_name (name, branch, change.revision) if os.path.exists (lockfile): # This means we have already reported this failure for this # builder to the author. return + lock = glob.glob ("/tmp/gdb-buildbot-breakage-report-%s-*" % change.revision) + if lock: + send_gdb_patches_msg = False + else: + send_gdb_patches_msg = True + # This file will be cleaned the next time we run # MessageGDBTesters, iff the build breakage has been fixed. open (lockfile, 'w').close () @@ -229,16 +236,19 @@ subsequent commits are made after X, by different people.""" to = change.who.encode ('ascii', 'ignore').decode ('ascii') title = change.comments.split ('\n')[0] - sbj = 'Your commit \'%s\' broke GDB' % title + sbj = 'Oh dear. I regret to inform you that commit \'%s\' might be unfortunate' % title if branch != 'master': sbj += ' [%s]' % branch - text = "Hello there,\n\n" - text += "Your commit:\n\n" + text = "My lords, ladies, gentlemen, members of the public.\n\n" + text += "It is a matter of great regret and sadness to inform you that commit:\n\n" text += "\t%s\n" % title text += "\t%s\n\n" % rev - text += "broke GDB. Please fix it, or the GDB gods will get you.\n\n" - text += "You can find details of the breakage below.\n\n" + text += "might have made GDB unwell. Since I am just your Butler BuildBot,\n" + text += "I kindly ask that a human superior officer double-check this.\n\n" + text += "Please note that if you are reading this message on gdb-patches, there might\n" + text += "be other builders broken.\n\n" + text += "You can find more details about the unfortunate breakage below.\n\n" text += "Cheers,\n\n" text += "Your GDB BuildBot.\n\n" text += "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n\n" @@ -246,8 +256,11 @@ subsequent commits are made after X, by different people.""" mail = MIMEText (text) mail['Subject'] = sbj - mail['From'] = GDB_MAIL_FROM - mail['To'] = to + ',gdb-patches@sourceware.org' + mail['From'] = 'gdb-buildbot@sergiodj.net' + if send_gdb_patches_msg: + to += ", gdb-patches@sourceware.org" + mail['To'] = to + mail['Reply-To'] = 'gdb-patches@sourceware.org' s = smtplib.SMTP ('localhost') s.sendmail (GDB_MAIL_FROM, [ to ], mail.as_string ()) @@ -405,7 +418,7 @@ send to the gdb-testers mailing list.""" else: # There is no build breakage anymore! Yay! Now, let's see if # we need to clean up any lock file from previous breaks. - lockfile = make_breakage_lockfile_name (name, branch) + lockfile = make_breakage_lockfile_name (cur_change.revision, name, branch) if os.path.exists (lockfile): # We need to clean the lockfile. Garbage-collect it here. os.remove (lockfile)