src/Pure/Tools/build_log.scala
changeset 64086 ac7ae5067783
parent 64085 1c451e5c145f
child 64087 a77c57235bae
equal deleted inserted replaced
64085:1c451e5c145f 64086:ac7ae5067783
   247     threads: Option[Int],
   247     threads: Option[Int],
   248     timing: Option[Timing],
   248     timing: Option[Timing],
   249     ml_timing: Option[Timing],
   249     ml_timing: Option[Timing],
   250     status: Session_Status.Value)
   250     status: Session_Status.Value)
   251   {
   251   {
   252     def ok: Boolean = status == Session_Status.EXISTING || status == Session_Status.FINISHED
       
   253     def finished: Boolean = status == Session_Status.FINISHED
   252     def finished: Boolean = status == Session_Status.FINISHED
   254   }
   253   }
   255 
   254 
   256   sealed case class Build_Info(sessions: Map[String, Session_Entry])
   255   sealed case class Build_Info(sessions: Map[String, Session_Entry])
   257   {
   256   {
   288       new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time, (\d+):(\d+):(\d+) cpu time.*$""")
   287       new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time, (\d+):(\d+):(\d+) cpu time.*$""")
   289     val Session_Finished2 =
   288     val Session_Finished2 =
   290       new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time.*$""")
   289       new Regex("""^Finished (\S+) \((\d+):(\d+):(\d+) elapsed time.*$""")
   291     val Session_Timing =
   290     val Session_Timing =
   292       new Regex("""^Timing (\S+) \((\d) threads, (\d+\.\d+)s elapsed time, (\d+\.\d+)s cpu time, (\d+\.\d+)s GC time.*$""")
   291       new Regex("""^Timing (\S+) \((\d) threads, (\d+\.\d+)s elapsed time, (\d+\.\d+)s cpu time, (\d+\.\d+)s GC time.*$""")
       
   292     val Session_Started = new Regex("""^(?:Running|Building) (\S+) \.\.\.$""")
   293     val Session_Failed = new Regex("""^(\S+) FAILED""")
   293     val Session_Failed = new Regex("""^(\S+) FAILED""")
   294     val Session_Cancelled = new Regex("""^(\S+) CANCELLED""")
   294     val Session_Cancelled = new Regex("""^(\S+) CANCELLED""")
   295 
   295 
   296     var chapter = Map.empty[String, String]
   296     var chapter = Map.empty[String, String]
   297     var groups = Map.empty[String, List[String]]
   297     var groups = Map.empty[String, List[String]]
   298     var threads = Map.empty[String, Int]
   298     var threads = Map.empty[String, Int]
   299     var timing = Map.empty[String, Timing]
   299     var timing = Map.empty[String, Timing]
   300     var ml_timing = Map.empty[String, Timing]
   300     var ml_timing = Map.empty[String, Timing]
       
   301     var started = Set.empty[String]
   301     var failed = Set.empty[String]
   302     var failed = Set.empty[String]
   302     var cancelled = Set.empty[String]
   303     var cancelled = Set.empty[String]
   303     def all_sessions: Set[String] =
   304     def all_sessions: Set[String] =
   304       chapter.keySet ++ groups.keySet ++ threads.keySet ++
   305       chapter.keySet ++ groups.keySet ++ threads.keySet ++
   305       timing.keySet ++ ml_timing.keySet ++ failed ++ cancelled
   306       timing.keySet ++ ml_timing.keySet ++ failed ++ cancelled ++ started
   306 
   307 
   307 
   308 
   308     for (line <- log_file.lines) {
   309     for (line <- log_file.lines) {
   309       line match {
   310       line match {
   310         case Session_No_Groups(Chapter_Name(chapt, name)) =>
   311         case Session_No_Groups(Chapter_Name(chapt, name)) =>
   311           chapter += (name -> chapt)
   312           chapter += (name -> chapt)
   312           groups += (name -> Nil)
   313           groups += (name -> Nil)
   313         case Session_Groups(Chapter_Name(chapt, name), grps) =>
   314         case Session_Groups(Chapter_Name(chapt, name), grps) =>
   314           chapter += (name -> chapt)
   315           chapter += (name -> chapt)
   315           groups += (name -> Word.explode(grps))
   316           groups += (name -> Word.explode(grps))
       
   317         case Session_Started(name) =>
       
   318           started += name
   316         case Session_Finished1(name,
   319         case Session_Finished1(name,
   317             Value.Int(e1), Value.Int(e2), Value.Int(e3),
   320             Value.Int(e1), Value.Int(e2), Value.Int(e3),
   318             Value.Int(c1), Value.Int(c2), Value.Int(c3)) =>
   321             Value.Int(c1), Value.Int(c2), Value.Int(c3)) =>
   319           val elapsed = Time.hms(e1, e2, e3)
   322           val elapsed = Time.hms(e1, e2, e3)
   320           val cpu = Time.hms(c1, c2, c3)
   323           val cpu = Time.hms(c1, c2, c3)
   338       Map(
   341       Map(
   339         (for (name <- all_sessions.toList) yield {
   342         (for (name <- all_sessions.toList) yield {
   340           val status =
   343           val status =
   341             if (failed(name)) Session_Status.FAILED
   344             if (failed(name)) Session_Status.FAILED
   342             else if (cancelled(name)) Session_Status.CANCELLED
   345             else if (cancelled(name)) Session_Status.CANCELLED
   343             else if (timing.isDefinedAt(name)) Session_Status.FINISHED
   346             else if (timing.isDefinedAt(name) || ml_timing.isDefinedAt(name))
       
   347               Session_Status.FINISHED
       
   348             else if (started(name)) Session_Status.FAILED
   344             else Session_Status.EXISTING
   349             else Session_Status.EXISTING
   345           val entry =
   350           val entry =
   346             Session_Entry(
   351             Session_Entry(
   347               chapter.getOrElse(name, ""),
   352               chapter.getOrElse(name, ""),
   348               groups.getOrElse(name, Nil),
   353               groups.getOrElse(name, Nil),