4 |
4 |
5 import os |
5 import os |
6 from os import path |
6 from os import path |
7 from glob import glob |
7 from glob import glob |
8 import subprocess |
8 import subprocess |
|
9 from datetime import datetime |
9 import re |
10 import re |
10 |
11 |
11 import util |
12 import util |
12 |
13 from util import Lazy |
|
14 |
|
15 from mira.report import Report, Report_Content |
|
16 from mira.case import Case |
|
17 from mira.tools import tool |
13 from mira import schedule |
18 from mira import schedule |
14 from mira.environment import scheduler |
19 from mira.environment import scheduler |
15 |
20 |
16 |
21 |
17 # build and evaluation tools |
22 # build and evaluation tools |
89 summary = '\n'.join(re_error.findall(logdata)) |
94 summary = '\n'.join(re_error.findall(logdata)) |
90 if summary == '': |
95 if summary == '': |
91 summary = 'ok' |
96 summary = 'ok' |
92 |
97 |
93 return summary |
98 return summary |
|
99 |
|
100 |
|
101 @tool |
|
102 def import_isatest_log(env, conf, logfile): |
|
103 |
|
104 """Imports isatest log file as a report.""" |
|
105 |
|
106 def the_match(pat, text, name): |
|
107 match = re.search(pat, text) |
|
108 if not match: raise Exception('No match found for ' + name) |
|
109 return match.groups() |
|
110 |
|
111 def parse_date(d): |
|
112 return datetime.strptime(d, '%a %b %d %H:%M:%S %Z %Y') |
|
113 |
|
114 log = util.readfile(logfile) |
|
115 |
|
116 (begin_date, host) = the_match(r'-+ starting test -+ ([^-]*) -+ (\S*)', log, 'start tag') |
|
117 (isabelle_version,) = the_match(r'Isabelle version: ([a-f0-9]{12})', log, 'Isabelle version') |
|
118 (success, end_date) = the_match(r'-+ test (successful|FAILED) -+ ([^-]*) -', log, 'end tag') |
|
119 summary = extract_isabelle_run_summary(log) |
|
120 data = {'timing': extract_isabelle_run_timing(log)} |
|
121 atts = {'log': Lazy.simple(log)} |
|
122 |
|
123 content = Report_Content(summary, host, parse_date(begin_date), |
|
124 parse_date(end_date), Lazy.simple(data), atts) |
|
125 revision = ('Isabelle', env.repositories.get('Isabelle')[isabelle_version].hex()) |
|
126 case = Case(conf, [revision]) |
|
127 |
|
128 env.report_db.put(case, (success == 'successful'), content) |
|
129 |
94 |
130 |
95 |
131 |
96 def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name): |
132 def isabelle_usedir(env, isa_path, isabelle_usedir_opts, base_image, dir_name): |
97 |
133 |
98 return env.run_process('%s/bin/isabelle' % isa_path, 'usedir', |
134 return env.run_process('%s/bin/isabelle' % isa_path, 'usedir', |