src/Pure/Tools/server_commands.scala
author wenzelm
Thu, 15 Mar 2018 11:16:01 +0100
changeset 67862 20a0e0ea6237
parent 67861 cd1cac824ef8
child 67863 1805960b4a9f
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/server_commands.scala
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     3
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     4
Miscellaneous Isabelle server commands.
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     5
*/
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     6
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     7
package isabelle
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     8
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
     9
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    10
object Server_Commands
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    11
{
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    12
  object Session_Build
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    13
  {
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    14
    sealed case class Args(
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    15
      session: String,
67862
wenzelm
parents: 67861
diff changeset
    16
      preferences: String = "",
wenzelm
parents: 67861
diff changeset
    17
      options: List[String] = Nil,
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    18
      dirs: List[String] = Nil,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    19
      ancestor_session: String = "",
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    20
      all_known: Boolean = false,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    21
      focus_session: Boolean = false,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    22
      required_session: Boolean = false,
67853
74e2a4b62826 more options;
wenzelm
parents: 67852
diff changeset
    23
      system_mode: Boolean = false,
74e2a4b62826 more options;
wenzelm
parents: 67852
diff changeset
    24
      verbose: Boolean = false)
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    25
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    26
    def unapply(json: JSON.T): Option[Args] =
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    27
      for {
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    28
        session <- JSON.string(json, "session")
67862
wenzelm
parents: 67861
diff changeset
    29
        preferences <- JSON.string_default(json, "preferences")
wenzelm
parents: 67861
diff changeset
    30
        options <- JSON.list_default(json, "options", JSON.Value.String.unapply _)
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    31
        dirs <- JSON.list_default(json, "dirs", JSON.Value.String.unapply _)
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    32
        ancestor_session <- JSON.string_default(json, "ancestor_session")
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    33
        all_known <- JSON.bool_default(json, "all_known")
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    34
        focus_session <- JSON.bool_default(json, "focus_session")
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    35
        required_session <- JSON.bool_default(json, "required_session")
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    36
        system_mode <- JSON.bool_default(json, "system_mode")
67853
74e2a4b62826 more options;
wenzelm
parents: 67852
diff changeset
    37
        verbose <- JSON.bool_default(json, "verbose")
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    38
      }
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    39
      yield {
67862
wenzelm
parents: 67861
diff changeset
    40
        Args(session, preferences = preferences, options = options, dirs = dirs,
wenzelm
parents: 67861
diff changeset
    41
          ancestor_session = ancestor_session, all_known = all_known, focus_session = focus_session,
wenzelm
parents: 67861
diff changeset
    42
          required_session = required_session, system_mode = system_mode, verbose = verbose)
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    43
      }
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    44
67861
cd1cac824ef8 asynchronous "session_build";
wenzelm
parents: 67858
diff changeset
    45
    def command(progress: Progress, args: Args)
cd1cac824ef8 asynchronous "session_build";
wenzelm
parents: 67858
diff changeset
    46
      : (JSON.Object.T, Build.Results, Sessions.Base_Info) =
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    47
    {
67862
wenzelm
parents: 67861
diff changeset
    48
      val options = Options.init(prefs = args.preferences, opts = args.options)
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    49
      val dirs = args.dirs.map(Path.explode(_))
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    50
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    51
      val base_info =
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    52
        Sessions.base_info(options,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    53
          args.session,
67852
f701a1d5d852 allow cancellation of Sessions.deps/base_info via progress.stopped (progress.echo only happens for options like "verbose");
wenzelm
parents: 67850
diff changeset
    54
          progress = progress,
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    55
          dirs = dirs,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    56
          ancestor_session = proper_string(args.ancestor_session),
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    57
          all_known = args.all_known,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    58
          focus_session = args.focus_session,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    59
          required_session = args.required_session)
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    60
      val base = base_info.check_base
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    61
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    62
      val results =
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    63
        Build.build(options,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    64
          progress = progress,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    65
          build_heap = true,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    66
          system_mode = args.system_mode,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    67
          dirs = dirs,
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    68
          infos = base_info.infos,
67853
74e2a4b62826 more options;
wenzelm
parents: 67852
diff changeset
    69
          verbose = args.verbose,
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    70
          sessions = List(args.session))
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    71
67858
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    72
      val sessions_order =
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    73
        base_info.sessions_structure.imports_topological_order.zipWithIndex.
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    74
          toMap.withDefaultValue(-1)
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    75
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    76
      val results_json =
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    77
        JSON.Object(
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    78
          "return_code" -> results.rc,
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    79
          "sessions" ->
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    80
            results.sessions.toList.sortBy(sessions_order).map(session =>
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    81
              JSON.Object(
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    82
                "session" -> session,
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    83
                "return_code" -> results(session).rc,
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    84
                "timeout" -> results(session).timeout,
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    85
                "timing" -> results(session).timing.json)))
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    86
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    87
      if (results.ok) (results_json, results, base_info)
cba5c5657378 more informative JSON results;
wenzelm
parents: 67853
diff changeset
    88
      else throw new Server.Error("Session build failed: return code " + results.rc, results_json)
67848
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    89
    }
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    90
  }
dd83610333de added server command "session_build": similar to JEdit_Resources.session_build;
wenzelm
parents:
diff changeset
    91
}