src/Pure/Admin/isabelle_cronjob.scala
changeset 66895 e378e0468ef2
parent 66887 72b78ee82f7b
child 66896 85e6748bf8b2
equal deleted inserted replaced
66892:d67d28254ff2 66895:e378e0468ef2
   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",