src/Pure/Build/build_manager.scala
changeset 80254 6b3374d208b8
parent 80252 96543177ab7e
child 80255 1844c169e360
equal deleted inserted replaced
80253:a3c2868cfb5d 80254:6b3374d208b8
    56     sessions: List[String] = Nil,
    56     sessions: List[String] = Nil,
    57     build_heap: Boolean = false,
    57     build_heap: Boolean = false,
    58     clean_build: Boolean = false,
    58     clean_build: Boolean = false,
    59     export_files: Boolean = false,
    59     export_files: Boolean = false,
    60     fresh_build: Boolean = false,
    60     fresh_build: Boolean = false,
    61     presentation: Boolean = false
    61     presentation: Boolean = false,
       
    62     verbose: Boolean = false
    62   ) extends Build_Config {
    63   ) extends Build_Config {
    63     def name: String = User_Build.name
    64     def name: String = User_Build.name
    64     def components: List[Component] = afp_rev.map(Component.AFP).toList
    65     def components: List[Component] = afp_rev.map(Component.AFP).toList
    65     def command(build_hosts: List[Build_Cluster.Host]): String = {
    66     def command(build_hosts: List[Build_Cluster.Host]): String = {
    66       " build" +
    67       " build" +
    73         if_proper(build_heap, " -b") +
    74         if_proper(build_heap, " -b") +
    74         if_proper(clean_build, " -c") +
    75         if_proper(clean_build, " -c") +
    75         if_proper(export_files, " -e") +
    76         if_proper(export_files, " -e") +
    76         if_proper(fresh_build, " -f") +
    77         if_proper(fresh_build, " -f") +
    77         Options.Spec.bash_strings(prefs, bg = true) +
    78         Options.Spec.bash_strings(prefs, bg = true) +
    78         " -v" +
    79         if_proper(verbose, " -v") +
    79         sessions.map(session => " " + Bash.string(session)).mkString
    80         sessions.map(session => " " + Bash.string(session)).mkString
    80     }
    81     }
    81   }
    82   }
    82 
    83 
    83   enum Priority { case low, normal, high }
    84   enum Priority { case low, normal, high }
   266       val build_heap = SQL.Column.bool("build_heap")
   267       val build_heap = SQL.Column.bool("build_heap")
   267       val clean_build = SQL.Column.bool("clean_build")
   268       val clean_build = SQL.Column.bool("clean_build")
   268       val export_files = SQL.Column.bool("export_files")
   269       val export_files = SQL.Column.bool("export_files")
   269       val fresh_build = SQL.Column.bool("fresh_build")
   270       val fresh_build = SQL.Column.bool("fresh_build")
   270       val presentation = SQL.Column.bool("presentation")
   271       val presentation = SQL.Column.bool("presentation")
       
   272       val verbose = SQL.Column.bool("verbose")
   271 
   273 
   272       val table =
   274       val table =
   273         make_table(List(kind, id, submit_date, priority, isabelle_rev, components, prefs,
   275         make_table(List(kind, id, submit_date, priority, isabelle_rev, components, prefs,
   274           requirements, all_sessions, base_sessions, exclude_session_groups, exclude_sessions,
   276           requirements, all_sessions, base_sessions, exclude_session_groups, exclude_sessions,
   275           session_groups, sessions, build_heap, clean_build, export_files, fresh_build,
   277           session_groups, sessions, build_heap, clean_build, export_files, fresh_build,
   276           presentation),
   278           presentation, verbose),
   277         name = "pending")
   279         name = "pending")
   278     }
   280     }
   279 
   281 
   280     def pull_pending(db: SQL.Database): Build_Manager.State.Pending =
   282     def pull_pending(db: SQL.Database): Build_Manager.State.Pending =
   281       db.execute_query_statement(Pending.table.select(), Map.from[String, Task], get =
   283       db.execute_query_statement(Pending.table.select(), Map.from[String, Task], get =
   302               val build_heap = res.bool(Pending.build_heap)
   304               val build_heap = res.bool(Pending.build_heap)
   303               val clean_build = res.bool(Pending.clean_build)
   305               val clean_build = res.bool(Pending.clean_build)
   304               val export_files = res.bool(Pending.export_files)
   306               val export_files = res.bool(Pending.export_files)
   305               val fresh_build = res.bool(Pending.fresh_build)
   307               val fresh_build = res.bool(Pending.fresh_build)
   306               val presentation = res.bool(Pending.presentation)
   308               val presentation = res.bool(Pending.presentation)
       
   309               val verbose = res.bool(Pending.verbose)
   307 
   310 
   308               val afp_rev = components.find(_.name == Component.AFP().name).map(_.rev)
   311               val afp_rev = components.find(_.name == Component.AFP().name).map(_.rev)
   309               User_Build(afp_rev, prefs, requirements, all_sessions, base_sessions,
   312               User_Build(afp_rev, prefs, requirements, all_sessions, base_sessions,
   310                 exclude_session_groups, exclude_sessions, session_groups, sessions, build_heap,
   313                 exclude_session_groups, exclude_sessions, session_groups, sessions, build_heap,
   311                 clean_build, export_files, fresh_build, presentation)
   314                 clean_build, export_files, fresh_build, presentation, verbose)
   312             }
   315             }
   313 
   316 
   314           val task = Task(build_config, UUID.make(id), submit_date, priority, isabelle_rev)
   317           val task = Task(build_config, UUID.make(id), submit_date, priority, isabelle_rev)
   315 
   318 
   316           task.name -> task
   319           task.name -> task
   355             stmt.bool(15) = get(_.build_heap)
   358             stmt.bool(15) = get(_.build_heap)
   356             stmt.bool(16) = get(_.clean_build)
   359             stmt.bool(16) = get(_.clean_build)
   357             stmt.bool(17) = get(_.export_files)
   360             stmt.bool(17) = get(_.export_files)
   358             stmt.bool(18) = get(_.fresh_build)
   361             stmt.bool(18) = get(_.fresh_build)
   359             stmt.bool(19) = get(_.presentation)
   362             stmt.bool(19) = get(_.presentation)
       
   363             stmt.bool(20) = get(_.verbose)
   360           })
   364           })
   361       }
   365       }
   362 
   366 
   363       update
   367       update
   364     }
   368     }
  1175     fresh_build: Boolean = false,
  1179     fresh_build: Boolean = false,
  1176     session_groups: List[String] = Nil,
  1180     session_groups: List[String] = Nil,
  1177     sessions: List[String] = Nil,
  1181     sessions: List[String] = Nil,
  1178     prefs: List[Options.Spec] = Nil,
  1182     prefs: List[Options.Spec] = Nil,
  1179     exclude_sessions: List[String] = Nil,
  1183     exclude_sessions: List[String] = Nil,
       
  1184     verbose: Boolean = false,
  1180     rev: String = "",
  1185     rev: String = "",
  1181     progress: Progress = new Progress
  1186     progress: Progress = new Progress
  1182   ): UUID.T = {
  1187   ): UUID.T = {
  1183     val id = UUID.random()
  1188     val id = UUID.random()
  1184     val afp_rev = if (afp_root.nonEmpty) Some("") else None
  1189     val afp_rev = if (afp_root.nonEmpty) Some("") else None
  1185 
  1190 
  1186     val build_config = User_Build(afp_rev, prefs, requirements, all_sessions, base_sessions,
  1191     val build_config = User_Build(afp_rev, prefs, requirements, all_sessions, base_sessions,
  1187       exclude_session_groups, exclude_sessions, session_groups, sessions, build_heap, clean_build,
  1192       exclude_session_groups, exclude_sessions, session_groups, sessions, build_heap, clean_build,
  1188       export_files, fresh_build, presentation)
  1193       export_files, fresh_build, presentation, verbose)
  1189     val task = Task(build_config, id, Date.now(), Priority.high)
  1194     val task = Task(build_config, id, Date.now(), Priority.high)
  1190 
  1195 
  1191     val context = Context(store, task)
  1196     val context = Context(store, task)
  1192 
  1197 
  1193     progress.interrupt_handler {
  1198     progress.interrupt_handler {
  1291       var export_files = false
  1296       var export_files = false
  1292       var fresh_build = false
  1297       var fresh_build = false
  1293       val session_groups = new mutable.ListBuffer[String]
  1298       val session_groups = new mutable.ListBuffer[String]
  1294       var options = Options.init(specs = Options.Spec.ISABELLE_BUILD_OPTIONS)
  1299       var options = Options.init(specs = Options.Spec.ISABELLE_BUILD_OPTIONS)
  1295       var prefs: List[Options.Spec] = Nil
  1300       var prefs: List[Options.Spec] = Nil
       
  1301       var verbose = false
  1296       var rev = ""
  1302       var rev = ""
  1297       val exclude_sessions = new mutable.ListBuffer[String]
  1303       val exclude_sessions = new mutable.ListBuffer[String]
  1298 
  1304 
  1299       val getopts = Getopts("""
  1305       val getopts = Getopts("""
  1300 Usage: isabelle build_task [OPTIONS] [SESSIONS ...]
  1306 Usage: isabelle build_task [OPTIONS] [SESSIONS ...]
  1312     -f           fresh build
  1318     -f           fresh build
  1313     -g NAME      select session group NAME
  1319     -g NAME      select session group NAME
  1314     -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
  1320     -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
  1315     -p OPTIONS   comma-separated preferences for build process
  1321     -p OPTIONS   comma-separated preferences for build process
  1316     -r REV       explicit revision (default: state of working directory)
  1322     -r REV       explicit revision (default: state of working directory)
       
  1323     -v           verbose
  1317     -x NAME      exclude session NAME and all descendants
  1324     -x NAME      exclude session NAME and all descendants
  1318 
  1325 
  1319   Submit build task on SSH server. Notable system options:
  1326   Submit build task on SSH server. Notable system options:
  1320 
  1327 
  1321 """ + Library.indent_lines(2, show_options(notable_client_options, options)) + "\n",
  1328 """ + Library.indent_lines(2, show_options(notable_client_options, options)) + "\n",
  1331         "f" -> (_ => fresh_build = true),
  1338         "f" -> (_ => fresh_build = true),
  1332         "g:" -> (arg => session_groups += arg),
  1339         "g:" -> (arg => session_groups += arg),
  1333         "o:" -> (arg => options = options + arg),
  1340         "o:" -> (arg => options = options + arg),
  1334         "p:" -> (arg => prefs = Options.Spec.parse(arg)),
  1341         "p:" -> (arg => prefs = Options.Spec.parse(arg)),
  1335         "r:" -> (arg => rev = arg),
  1342         "r:" -> (arg => rev = arg),
       
  1343         "v" -> (_ => verbose = true),
  1336         "x:" -> (arg => exclude_sessions += arg))
  1344         "x:" -> (arg => exclude_sessions += arg))
  1337 
  1345 
  1338       val sessions = getopts(args)
  1346       val sessions = getopts(args)
  1339       val store = Store(options)
  1347       val store = Store(options)
  1340       val progress = new Console_Progress()
  1348       val progress = new Console_Progress()
  1342       build_task(options, store = store, afp_root = afp_root, base_sessions =
  1350       build_task(options, store = store, afp_root = afp_root, base_sessions =
  1343         base_sessions.toList, presentation = presentation, requirements = requirements,
  1351         base_sessions.toList, presentation = presentation, requirements = requirements,
  1344         exclude_session_groups = exclude_session_groups.toList, all_sessions = all_sessions,
  1352         exclude_session_groups = exclude_session_groups.toList, all_sessions = all_sessions,
  1345         build_heap = build_heap, clean_build = clean_build, export_files = export_files,
  1353         build_heap = build_heap, clean_build = clean_build, export_files = export_files,
  1346         fresh_build = fresh_build, session_groups = session_groups.toList, sessions = sessions,
  1354         fresh_build = fresh_build, session_groups = session_groups.toList, sessions = sessions,
  1347         prefs = prefs, rev = rev, exclude_sessions = exclude_sessions.toList, progress = progress)
  1355         prefs = prefs, verbose = verbose, rev = rev, exclude_sessions = exclude_sessions.toList,
       
  1356         progress = progress)
  1348     })
  1357     })
  1349 }
  1358 }
  1350 
  1359 
  1351 class Build_Manager_Tools extends Isabelle_Scala_Tools(
  1360 class Build_Manager_Tools extends Isabelle_Scala_Tools(
  1352   Build_Manager.isabelle_tool, Build_Manager.isabelle_tool1)
  1361   Build_Manager.isabelle_tool, Build_Manager.isabelle_tool1)