127 Build_Log.Prop.build_host + " = " + SQL.string(host) + |
127 Build_Log.Prop.build_host + " = " + SQL.string(host) + |
128 (if (detect == "") "" else " AND " + SQL.enclose(detect)) |
128 (if (detect == "") "" else " AND " + SQL.enclose(detect)) |
129 |
129 |
130 def profile: Build_Status.Profile = |
130 def profile: Build_Status.Profile = |
131 Build_Status.Profile(description, history = history, afp = afp, sql = sql) |
131 Build_Status.Profile(description, history = history, afp = afp, sql = sql) |
132 |
|
133 def history_base_filter(hg: Mercurial.Repository): Item => Boolean = |
|
134 { |
|
135 val rev0 = hg.id(history_base) |
|
136 val nodes = hg.graph().all_succs(List(rev0)).toSet |
|
137 (item: Item) => nodes(item.isabelle_version) |
|
138 } |
|
139 |
132 |
140 def pick( |
133 def pick( |
141 options: Options, |
134 options: Options, |
142 rev: String = "", |
135 rev: String = "", |
143 filter: Item => Boolean = _ => true): Option[(String, Option[String])] = |
136 filter: Item => Boolean = _ => true): Option[(String, Option[String])] = |
435 |
428 |
436 val main_start_date = Date.now() |
429 val main_start_date = Date.now() |
437 File.write(main_state_file, main_start_date + " " + log_service.hostname) |
430 File.write(main_state_file, main_start_date + " " + log_service.hostname) |
438 |
431 |
439 val hg = Mercurial.repository(isabelle_repos) |
432 val hg = Mercurial.repository(isabelle_repos) |
|
433 val hg_graph = hg.graph() |
440 val rev = hg.id() |
434 val rev = hg.id() |
|
435 |
|
436 def history_base_filter(r: Remote_Build): Item => Boolean = |
|
437 { |
|
438 val base_rev = hg.id(r.history_base) |
|
439 val nodes = hg_graph.all_succs(List(base_rev)).toSet |
|
440 (item: Item) => nodes(item.isabelle_version) |
|
441 } |
441 |
442 |
442 run(main_start_date, |
443 run(main_start_date, |
443 Logger_Task("isabelle_cronjob", logger => |
444 Logger_Task("isabelle_cronjob", logger => |
444 run_now( |
445 run_now( |
445 SEQ(List(build_release, build_history_base, |
446 SEQ(List(build_release, build_history_base, |
446 PAR(remote_builds.map(seq => |
447 PAR(remote_builds.map(seq => |
447 SEQ( |
448 SEQ( |
448 for { |
449 for { |
449 (r, i) <- (if (seq.length <= 1) seq.map((_, -1)) else seq.zipWithIndex) |
450 (r, i) <- (if (seq.length <= 1) seq.map((_, -1)) else seq.zipWithIndex) |
450 (isabelle_rev, afp_rev) <- r.pick(logger.options, rev, r.history_base_filter(hg)) |
451 (isabelle_rev, afp_rev) <- r.pick(logger.options, rev, history_base_filter(r)) |
451 } yield remote_build_history(isabelle_rev, afp_rev, i, r)))), |
452 } yield remote_build_history(isabelle_rev, afp_rev, i, r)))), |
452 Logger_Task("jenkins_logs", _ => Jenkins.download_logs(jenkins_jobs, main_dir)), |
453 Logger_Task("jenkins_logs", _ => Jenkins.download_logs(jenkins_jobs, main_dir)), |
453 Logger_Task("build_log_database", |
454 Logger_Task("build_log_database", |
454 logger => Isabelle_Devel.build_log_database(logger.options)), |
455 logger => Isabelle_Devel.build_log_database(logger.options)), |
455 Logger_Task("build_status", |
456 Logger_Task("build_status", |