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) |