Fine-controlling when to report build breakages
This commit is contained in:
parent
9c7630560c
commit
b27882c65c
1 changed files with 41 additions and 7 deletions
48
master.cfg
48
master.cfg
|
@ -177,10 +177,28 @@ def SendRootMessageGDBTesters (branch, change):
|
||||||
s.sendmail (GDB_MAIL_FROM, [ GDB_MAIL_TO ], mail.as_string ())
|
s.sendmail (GDB_MAIL_FROM, [ GDB_MAIL_TO ], mail.as_string ())
|
||||||
s.quit ()
|
s.quit ()
|
||||||
|
|
||||||
def SendAuthorMessage (change, text_prepend):
|
def make_breakage_lockfile_name (builder):
|
||||||
"""Send a message to the author of the commit if it broke GDB."""
|
return "/tmp/gdb-buildbot-%s.lock" % builder
|
||||||
|
|
||||||
|
def SendAuthorMessage (name, change, text_prepend):
|
||||||
|
"""Send a message to the author of the commit if it broke GDB.
|
||||||
|
|
||||||
|
We use a lock file to avoid reporting the breakage to different
|
||||||
|
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
|
global GDB_MAIL_FROM
|
||||||
|
|
||||||
|
lockfile = make_breakage_lockfile_name (name)
|
||||||
|
|
||||||
|
if os.path.exists (lockfile):
|
||||||
|
# This means we have already reported this failure for this
|
||||||
|
# builder to the author.
|
||||||
|
return
|
||||||
|
|
||||||
|
# This file will be cleaned the next time we run
|
||||||
|
# MessageGDBTesters, iff the build breakage has been fixed.
|
||||||
|
open (lockfile, 'w').close ()
|
||||||
|
|
||||||
rev = change.revision
|
rev = change.revision
|
||||||
to = change.who
|
to = change.who
|
||||||
title = change.comments.split ('\n')[0]
|
title = change.comments.split ('\n')[0]
|
||||||
|
@ -263,8 +281,17 @@ send to the gdb-testers mailing list."""
|
||||||
if isrebuild and isrebuild == 'yes':
|
if isrebuild and isrebuild == 'yes':
|
||||||
text += "\n*** WARNING: This was a REBUILD request! ***\n"
|
text += "\n*** WARNING: This was a REBUILD request! ***\n"
|
||||||
text += "*** The previous build (build #%s) MAY NOT BE the ancestor of the current build! ***\n\n" % properties.getProperty ('buildnumber')
|
text += "*** The previous build (build #%s) MAY NOT BE the ancestor of the current build! ***\n\n" % properties.getProperty ('buildnumber')
|
||||||
send_author_msg = False
|
|
||||||
|
# report_build_breakage will be True if we see a build breakage,
|
||||||
|
# i.e., if the 'configure' or the 'compile' steps fail. In this
|
||||||
|
# case, we use this variable to know if we must report the
|
||||||
|
# breakage directly to the author.
|
||||||
|
report_build_breakage = False
|
||||||
|
|
||||||
|
# found_regressions will be True if the 'regressions' log is not
|
||||||
|
# empty.
|
||||||
found_regressions = False
|
found_regressions = False
|
||||||
|
|
||||||
for log in build.getLogs ():
|
for log in build.getLogs ():
|
||||||
st = log.getStep ()
|
st = log.getStep ()
|
||||||
if st.getResults ()[0] == FAILURE:
|
if st.getResults ()[0] == FAILURE:
|
||||||
|
@ -280,7 +307,7 @@ send to the gdb-testers mailing list."""
|
||||||
text += "============================\n"
|
text += "============================\n"
|
||||||
text += log.getText ()
|
text += log.getText ()
|
||||||
text += "============================\n"
|
text += "============================\n"
|
||||||
send_author_msg = True
|
report_build_breakage = True
|
||||||
break
|
break
|
||||||
elif n == 'compile gdb':
|
elif n == 'compile gdb':
|
||||||
text += "*** Failed to compiled GDB. ***\n"
|
text += "*** Failed to compiled GDB. ***\n"
|
||||||
|
@ -293,7 +320,7 @@ send to the gdb-testers mailing list."""
|
||||||
else:
|
else:
|
||||||
text += ct
|
text += ct
|
||||||
text += "============================\n"
|
text += "============================\n"
|
||||||
send_author_msg = True
|
report_build_breakage = True
|
||||||
break
|
break
|
||||||
elif n == 'make tags':
|
elif n == 'make tags':
|
||||||
# We do not want to break here, because if this step
|
# We do not want to break here, because if this step
|
||||||
|
@ -330,8 +357,15 @@ send to the gdb-testers mailing list."""
|
||||||
text += "============================\n"
|
text += "============================\n"
|
||||||
text += "\n"
|
text += "\n"
|
||||||
|
|
||||||
if send_author_msg:
|
if report_build_breakage:
|
||||||
SendAuthorMessage (cur_change, text)
|
SendAuthorMessage (name, cur_change, text)
|
||||||
|
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)
|
||||||
|
if os.path.exists (lockfile):
|
||||||
|
# We need to clean the lockfile. Garbage-collect it here.
|
||||||
|
os.remove (lockfile)
|
||||||
|
|
||||||
return { 'body' : text,
|
return { 'body' : text,
|
||||||
'type' : 'plain',
|
'type' : 'plain',
|
||||||
|
|
Loading…
Reference in a new issue