16 import scala.util.matching.Regex |
16 import scala.util.matching.Regex |
17 |
17 |
18 |
18 |
19 object Build_Log |
19 object Build_Log |
20 { |
20 { |
21 /** directory content **/ |
21 /** content **/ |
22 |
22 |
23 /* file names */ |
23 /* properties */ |
24 |
24 |
25 def log_date(date: Date): String = |
25 object Prop |
26 String.format(Locale.ROOT, "%s.%05d", |
26 { |
27 DateTimeFormatter.ofPattern("yyyy-MM-dd").format(date.rep), |
27 val build_tags = "build_tags" |
28 new java.lang.Long((date.time - date.midnight.time).ms / 1000)) |
28 val build_group_id = "build_group_id" |
29 |
29 val build_id = "build_id" |
30 def log_subdir(date: Date): Path = |
30 val build_engine = "build_engine" |
31 Path.explode("log") + Path.explode(date.rep.getYear.toString) |
31 val build_host = "build_host" |
32 |
32 val build_start = "build_start" |
33 def log_filename(engine: String, date: Date, more: List[String] = Nil): Path = |
33 val build_end = "build_end" |
34 Path.explode((engine :: log_date(date) :: more).mkString("", "_", ".log")) |
34 val isabelle_version = "isabelle_version" |
35 |
35 val afp_version = "afp_version" |
36 |
36 } |
37 /* log file collections */ |
37 |
38 |
38 |
39 def is_log(file: JFile): Boolean = |
39 /* settings */ |
40 List(".log", ".log.gz", ".log.xz").exists(ext => file.getName.endsWith(ext)) |
|
41 |
|
42 def isatest_files(dir: Path): List[JFile] = |
|
43 File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("isatest-makeall-")) |
|
44 |
|
45 def afp_test_files(dir: Path): List[JFile] = |
|
46 File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("afp-test-devel-")) |
|
47 |
|
48 |
|
49 |
|
50 /** settings **/ |
|
51 |
40 |
52 object Settings |
41 object Settings |
53 { |
42 { |
54 val build_settings = List("ISABELLE_BUILD_OPTIONS") |
43 val build_settings = List("ISABELLE_BUILD_OPTIONS") |
55 val ml_settings = List("ML_PLATFORM", "ML_HOME", "ML_SYSTEM", "ML_OPTIONS") |
44 val ml_settings = List("ML_PLATFORM", "ML_HOME", "ML_SYSTEM", "ML_OPTIONS") |
74 |
63 |
75 def show(): String = |
64 def show(): String = |
76 cat_lines( |
65 cat_lines( |
77 build_settings.map(Entry.getenv(_)) ::: List("") ::: ml_settings.map(Entry.getenv(_))) |
66 build_settings.map(Entry.getenv(_)) ::: List("") ::: ml_settings.map(Entry.getenv(_))) |
78 } |
67 } |
|
68 |
|
69 |
|
70 /* file names */ |
|
71 |
|
72 def log_date(date: Date): String = |
|
73 String.format(Locale.ROOT, "%s.%05d", |
|
74 DateTimeFormatter.ofPattern("yyyy-MM-dd").format(date.rep), |
|
75 new java.lang.Long((date.time - date.midnight.time).ms / 1000)) |
|
76 |
|
77 def log_subdir(date: Date): Path = |
|
78 Path.explode("log") + Path.explode(date.rep.getYear.toString) |
|
79 |
|
80 def log_filename(engine: String, date: Date, more: List[String] = Nil): Path = |
|
81 Path.explode((engine :: log_date(date) :: more).mkString("", "_", ".log")) |
|
82 |
|
83 |
|
84 /* log file collections */ |
|
85 |
|
86 def is_log(file: JFile): Boolean = |
|
87 List(".log", ".log.gz", ".log.xz").exists(ext => file.getName.endsWith(ext)) |
|
88 |
|
89 def isatest_files(dir: Path): List[JFile] = |
|
90 File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("isatest-makeall-")) |
|
91 |
|
92 def afp_test_files(dir: Path): List[JFile] = |
|
93 File.find_files(dir.file, file => is_log(file) && file.getName.startsWith("afp-test-devel-")) |
79 |
94 |
80 |
95 |
81 |
96 |
82 /** log file **/ |
97 /** log file **/ |
83 |
98 |
243 |
258 |
244 |
259 |
245 |
260 |
246 /** meta info **/ |
261 /** meta info **/ |
247 |
262 |
248 object Field |
|
249 { |
|
250 val build_tags = "build_tags" |
|
251 val build_group_id = "build_group_id" |
|
252 val build_id = "build_id" |
|
253 val build_engine = "build_engine" |
|
254 val build_host = "build_host" |
|
255 val build_start = "build_start" |
|
256 val build_end = "build_end" |
|
257 val isabelle_version = "isabelle_version" |
|
258 val afp_version = "afp_version" |
|
259 } |
|
260 |
|
261 object Meta_Info |
263 object Meta_Info |
262 { |
264 { |
263 val empty: Meta_Info = Meta_Info(Nil, Nil) |
265 val empty: Meta_Info = Meta_Info(Nil, Nil) |
264 } |
266 } |
265 |
267 |
309 val build_id = |
311 val build_id = |
310 { |
312 { |
311 val prefix = if (host != "") host else if (engine != "") engine else "" |
313 val prefix = if (host != "") host else if (engine != "") engine else "" |
312 (if (prefix == "") "build" else prefix) + ":" + start.time.ms |
314 (if (prefix == "") "build" else prefix) + ":" + start.time.ms |
313 } |
315 } |
314 val build_engine = if (engine == "") Nil else List(Field.build_engine -> engine) |
316 val build_engine = if (engine == "") Nil else List(Prop.build_engine -> engine) |
315 val build_host = if (host == "") Nil else List(Field.build_host -> host) |
317 val build_host = if (host == "") Nil else List(Prop.build_host -> host) |
316 |
318 |
317 val start_date = List(Field.build_start -> start.toString) |
319 val start_date = List(Prop.build_start -> start.toString) |
318 val end_date = |
320 val end_date = |
319 log_file.lines.last match { |
321 log_file.lines.last match { |
320 case End(log_file.Strict_Date(end_date)) => |
322 case End(log_file.Strict_Date(end_date)) => |
321 List(Field.build_end -> end_date.toString) |
323 List(Prop.build_end -> end_date.toString) |
322 case _ => Nil |
324 case _ => Nil |
323 } |
325 } |
324 |
326 |
325 val isabelle_version = |
327 val isabelle_version = |
326 log_file.find_match(Isabelle_Version).map(Field.isabelle_version -> _) |
328 log_file.find_match(Isabelle_Version).map(Prop.isabelle_version -> _) |
327 val afp_version = |
329 val afp_version = |
328 log_file.find_match(AFP_Version).map(Field.afp_version -> _) |
330 log_file.find_match(AFP_Version).map(Prop.afp_version -> _) |
329 |
331 |
330 Meta_Info((Field.build_id -> build_id) :: build_engine ::: build_host ::: |
332 Meta_Info((Prop.build_id -> build_id) :: build_engine ::: build_host ::: |
331 start_date ::: end_date ::: isabelle_version.toList ::: afp_version.toList, |
333 start_date ::: end_date ::: isabelle_version.toList ::: afp_version.toList, |
332 log_file.get_settings(Settings.all_settings)) |
334 log_file.get_settings(Settings.all_settings)) |
333 } |
335 } |
334 |
336 |
335 log_file.lines match { |
337 log_file.lines match { |