src/Pure/Tools/build_process.scala
author wenzelm
Sat, 11 Feb 2023 11:42:13 +0100
changeset 77238 02308a0ddf30
child 77239 b9bf4c0bd47d
permissions -rw-r--r--
clarified modules;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77238
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/build_process.scala
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     3
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     4
Build process for sessions, with build database, optional heap, and
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     5
optional presentation.
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     6
*/
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     7
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     8
package isabelle
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
     9
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    10
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    11
object Build_Process {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    12
  /* timings from session database */
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    13
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    14
  type Session_Timing = (List[Properties.T], Double)
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    15
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    16
  object Session_Timing {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    17
    val empty: Session_Timing = (Nil, 0.0)
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    18
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    19
    def load(progress: Progress, store: Sessions.Store, session_name: String): Session_Timing = {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    20
      store.try_open_database(session_name) match {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    21
        case None => empty
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    22
        case Some(db) =>
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    23
          def ignore_error(msg: String) = {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    24
            progress.echo_warning("Ignoring bad database " + db +
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    25
              " for session " + quote(session_name) + (if (msg == "") "" else ":\n" + msg))
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    26
            empty
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    27
          }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    28
          try {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    29
            val command_timings = store.read_command_timings(db, session_name)
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    30
            val session_timing =
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    31
              store.read_session_timing(db, session_name) match {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    32
                case Markup.Elapsed(t) => t
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    33
                case _ => 0.0
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    34
              }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    35
            (command_timings, session_timing)
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    36
          }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    37
          catch {
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    38
            case ERROR(msg) => ignore_error(msg)
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    39
            case exn: java.lang.Error => ignore_error(Exn.message(exn))
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    40
            case _: XML.Error => ignore_error("XML.Error")
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    41
          }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    42
          finally { db.close() }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    43
      }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    44
    }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    45
  }
02308a0ddf30 clarified modules;
wenzelm
parents:
diff changeset
    46
}