1.1 --- a/Admin/mira.py Mon Apr 18 09:10:23 2011 +0200
1.2 +++ b/Admin/mira.py Mon Apr 18 10:00:55 2011 +0200
1.3 @@ -6,10 +6,15 @@
1.4 from os import path
1.5 from glob import glob
1.6 import subprocess
1.7 +from datetime import datetime
1.8 import re
1.9
1.10 import util
1.11 +from util import Lazy
1.12
1.13 +from mira.report import Report, Report_Content
1.14 +from mira.case import Case
1.15 +from mira.tools import tool
1.16 from mira import schedule
1.17 from mira.environment import scheduler
1.18
1.19 @@ -93,6 +98,37 @@
1.20 return summary
1.21
1.22
1.23 +@tool
1.24 +def import_isatest_log(env, conf, logfile):
1.25 +
1.26 + """Imports isatest log file as a report."""
1.27 +
1.28 + def the_match(pat, text, name):
1.29 + match = re.search(pat, text)
1.30 + if not match: raise Exception('No match found for ' + name)
1.31 + return match.groups()
1.32 +
1.33 + def parse_date(d):
1.34 + return datetime.strptime(d, '%a %b %d %H:%M:%S %Z %Y')
1.35 +
1.36 + log = util.readfile(logfile)
1.37 +
1.38 + (begin_date, host) = the_match(r'-+ starting test -+ ([^-]*) -+ (\S*)', log, 'start tag')
1.39 + (isabelle_version,) = the_match(r'Isabelle version: ([a-f0-9]{12})', log, 'Isabelle version')
1.40 + (success, end_date) = the_match(r'-+ test (successful|FAILED) -+ ([^-]*) -', log, 'end tag')
1.41 + summary = extract_isabelle_run_summary(log)
1.42 + data = {'timing': extract_isabelle_run_timing(log)}
1.43 + atts = {'log': Lazy.simple(log)}
1.44 +
1.45 + content = Report_Content(summary, host, parse_date(begin_date),
1.46 + parse_date(end_date), Lazy.simple(data), atts)
1.47 + revision = ('Isabelle', env.repositories.get('Isabelle')[isabelle_version].hex())
1.48 + case = Case(conf, [revision])
1.49 +
1.50 + env.report_db.put(case, (success == 'successful'), content)
1.51 +
1.52 +
1.53 +
1.54 def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name):
1.55
1.56 return env.run_process('%s/bin/isabelle' % isa_path, 'usedir',