Implementing diff against previous gdb.sum, instead of using a baseline
This commit is contained in:
parent
85ed927a4d
commit
7595196cc7
4 changed files with 59 additions and 7 deletions
|
@ -2,8 +2,36 @@
|
||||||
|
|
||||||
from buildbot.status.builder import SUCCESS, WARNINGS, FAILURE, EXCEPTION
|
from buildbot.status.builder import SUCCESS, WARNINGS, FAILURE, EXCEPTION
|
||||||
from buildbot.steps.shell import ShellCommand
|
from buildbot.steps.shell import ShellCommand
|
||||||
from sumfiles import DejaResults
|
from sumfiles import DejaResults, get_web_base
|
||||||
from gdbgitdb import switch_to_branch
|
from gdbgitdb import switch_to_branch
|
||||||
|
from shutil import copyfile
|
||||||
|
|
||||||
|
class CopyOldGDBSumFile (ShellCommand):
|
||||||
|
"""Copy the current gdb.sum file into the old_gdb.sum file."""
|
||||||
|
name = "copy gdb.sum file"
|
||||||
|
command = [ '/bin/true' ]
|
||||||
|
|
||||||
|
def __init__ (self, **kwargs):
|
||||||
|
ShellCommand.__init__ (self, **kwargs)
|
||||||
|
|
||||||
|
def evaluateCommand (self, cmd):
|
||||||
|
rev = self.getProperty('got_revision')
|
||||||
|
builder = self.getProperty('buildername')
|
||||||
|
istry = self.getProperty('isTryBuilder')
|
||||||
|
branch = self.getProperty('branch')
|
||||||
|
wb = get_web_base ()
|
||||||
|
if branch is None:
|
||||||
|
branch = 'master'
|
||||||
|
|
||||||
|
# Switch to the right branch inside the BUILDER repo
|
||||||
|
switch_to_branch (builder, branch)
|
||||||
|
|
||||||
|
try:
|
||||||
|
copyfile ("%d/%d/gdb.sum" % (wb, builder),
|
||||||
|
"%d/%d/previous_gdb.sum" % (wb, builder))
|
||||||
|
except IOError:
|
||||||
|
# If the dest file does not exist, ignore
|
||||||
|
pass
|
||||||
|
|
||||||
class GdbCatSumfileCommand(ShellCommand):
|
class GdbCatSumfileCommand(ShellCommand):
|
||||||
name = 'regressions'
|
name = 'regressions'
|
||||||
|
@ -27,20 +55,31 @@ class GdbCatSumfileCommand(ShellCommand):
|
||||||
cur_results = parser.read_sum_text(self.getLog('stdio').getText())
|
cur_results = parser.read_sum_text(self.getLog('stdio').getText())
|
||||||
if not istry or istry == 'no':
|
if not istry or istry == 'no':
|
||||||
baseline = parser.read_baseline (builder, branch)
|
baseline = parser.read_baseline (builder, branch)
|
||||||
|
old_sum = parser.read_old_sum_file (builder, branch)
|
||||||
else:
|
else:
|
||||||
baseline = parser.read_sum_file(builder, rev)
|
baseline = parser.read_sum_file(builder, rev)
|
||||||
|
old_sum = parser.read_old_sum_file (builder, rev)
|
||||||
result = SUCCESS
|
result = SUCCESS
|
||||||
if baseline is not None:
|
if baseline is not None:
|
||||||
report = parser.compute_regressions (builder, branch,
|
report = parser.compute_regressions (builder, branch,
|
||||||
cur_results, baseline)
|
cur_results, baseline)
|
||||||
|
if report is not '':
|
||||||
|
self.addCompleteLog ('baseline_diff', report)
|
||||||
|
result = WARNINGS
|
||||||
|
|
||||||
|
if old_sum is not None:
|
||||||
|
report = parser.compute_regressions (builder, branch,
|
||||||
|
cur_results, old_sum)
|
||||||
if report is not '':
|
if report is not '':
|
||||||
self.addCompleteLog ('regressions', report)
|
self.addCompleteLog ('regressions', report)
|
||||||
result = FAILURE
|
result = FAILURE
|
||||||
|
|
||||||
if not istry or istry == 'no':
|
if not istry or istry == 'no':
|
||||||
parser.write_sum_file (cur_results, builder, branch)
|
parser.write_sum_file (cur_results, builder, branch)
|
||||||
# If there was no previous baseline, then this run
|
# If there was no previous baseline, then this run
|
||||||
# gets the honor.
|
# gets the honor.
|
||||||
if baseline is None:
|
if baseline is None:
|
||||||
baseline = cur_results
|
baseline = cur_results
|
||||||
parser.write_baseline (baseline, builder, branch)
|
parser.write_baseline (baseline, builder, branch, rev)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -133,6 +133,8 @@ class SaveGDBResults (ShellCommand):
|
||||||
repo.index.add (['gdb.sum',
|
repo.index.add (['gdb.sum',
|
||||||
'gdb.log',
|
'gdb.log',
|
||||||
'baseline'])
|
'baseline'])
|
||||||
|
if os.path.exists ("%s/previous_gdb.sum"):
|
||||||
|
repo.index.add (['previous_gdb.sum'])
|
||||||
if repo.is_dirty ():
|
if repo.is_dirty ():
|
||||||
repo.index.commit ('Log files for %s -- branch %s' % (full_tag, branch))
|
repo.index.commit ('Log files for %s -- branch %s' % (full_tag, branch))
|
||||||
repo.index.write ()
|
repo.index.write ()
|
||||||
|
|
|
@ -46,7 +46,8 @@ class DejaResults(object):
|
||||||
test_name = nname
|
test_name = nname
|
||||||
out_dict[test_name] = result
|
out_dict[test_name] = result
|
||||||
|
|
||||||
def _write_sum_file(self, sum_dict, subdir, rev_or_branch, filename):
|
def _write_sum_file(self, sum_dict, subdir, rev_or_branch, filename,
|
||||||
|
header = None):
|
||||||
global gdb_web_base
|
global gdb_web_base
|
||||||
if not rev_or_branch:
|
if not rev_or_branch:
|
||||||
bdir = os.path.join (gdb_web_base, subdir)
|
bdir = os.path.join (gdb_web_base, subdir)
|
||||||
|
@ -57,15 +58,21 @@ class DejaResults(object):
|
||||||
fname = os.path.join (bdir, filename)
|
fname = os.path.join (bdir, filename)
|
||||||
keys = sum_dict.keys ()
|
keys = sum_dict.keys ()
|
||||||
keys.sort ()
|
keys.sort ()
|
||||||
with open (fname, 'w') as f:
|
mode = 'w'
|
||||||
|
if header:
|
||||||
|
with open (fname, 'w') as f:
|
||||||
|
f.write (header)
|
||||||
|
mode = 'a'
|
||||||
|
with open (fname, mode) as f:
|
||||||
for k in keys:
|
for k in keys:
|
||||||
f.write (sum_dict[k] + ': ' + k + '\n')
|
f.write (sum_dict[k] + ': ' + k + '\n')
|
||||||
|
|
||||||
def write_sum_file(self, sum_dict, builder, branch):
|
def write_sum_file(self, sum_dict, builder, branch):
|
||||||
self._write_sum_file (sum_dict, builder, None, 'gdb.sum')
|
self._write_sum_file (sum_dict, builder, None, 'gdb.sum')
|
||||||
|
|
||||||
def write_baseline(self, sum_dict, builder, branch):
|
def write_baseline(self, sum_dict, builder, branch, rev):
|
||||||
self._write_sum_file(sum_dict, builder, None, 'baseline')
|
self._write_sum_file(sum_dict, builder, None, 'baseline',
|
||||||
|
header = "### THIS BASELINE WAS LAST UPDATED BY COMMIT %s ###\n\n" % rev)
|
||||||
|
|
||||||
# Read a .sum file.
|
# Read a .sum file.
|
||||||
# The builder name is BUILDER.
|
# The builder name is BUILDER.
|
||||||
|
@ -98,6 +105,9 @@ class DejaResults(object):
|
||||||
return self._read_sum_file (builder, os.path.join ('xfails', branch),
|
return self._read_sum_file (builder, os.path.join ('xfails', branch),
|
||||||
'xfail')
|
'xfail')
|
||||||
|
|
||||||
|
def read_old_sum_file (self, builder, branch):
|
||||||
|
return self._read_sum_file (builder, None, 'previous_gdb.sum')
|
||||||
|
|
||||||
# Parse some text as a .sum file and return the resulting
|
# Parse some text as a .sum file and return the resulting
|
||||||
# dictionary.
|
# dictionary.
|
||||||
def read_sum_text (self, text):
|
def read_sum_text (self, text):
|
||||||
|
|
|
@ -24,7 +24,7 @@ from buildbot.steps.slave import RemoveDirectory
|
||||||
from buildbot.changes.filter import ChangeFilter
|
from buildbot.changes.filter import ChangeFilter
|
||||||
from buildbot.buildslave import BuildSlave
|
from buildbot.buildslave import BuildSlave
|
||||||
from buildbot.status.results import SUCCESS, WARNINGS, FAILURE, EXCEPTION
|
from buildbot.status.results import SUCCESS, WARNINGS, FAILURE, EXCEPTION
|
||||||
from gdbcommand import GdbCatSumfileCommand
|
from gdbcommand import CopyOldGDBSumFile, GdbCatSumfileCommand
|
||||||
from gdbgitdb import SaveGDBResults, get_builder_commit_id
|
from gdbgitdb import SaveGDBResults, get_builder_commit_id
|
||||||
from urllib import quote
|
from urllib import quote
|
||||||
|
|
||||||
|
@ -472,6 +472,7 @@ The parameters of the class are:
|
||||||
descriptionDone = r"removed old build dir"))
|
descriptionDone = r"removed old build dir"))
|
||||||
self.addStep (CloneOrUpdateGDBMasterRepo ())
|
self.addStep (CloneOrUpdateGDBMasterRepo ())
|
||||||
self.addStep (CloneOrUpdateGDBRepo ())
|
self.addStep (CloneOrUpdateGDBRepo ())
|
||||||
|
self.addStep (CopyOldGDBSumFile ())
|
||||||
|
|
||||||
if not self.extra_conf_flags:
|
if not self.extra_conf_flags:
|
||||||
self.extra_conf_flags = []
|
self.extra_conf_flags = []
|
||||||
|
|
Loading…
Reference in a new issue