src/Pure/Tools/build_process.scala
changeset 77648 e79a5ce8a74c
parent 77646 c55443f9fedd
child 77649 739cb777cc75
equal deleted inserted replaced
77647:c14db5d67400 77648:e79a5ce8a74c
   246     def is_running(name: String): Boolean = running.isDefinedAt(name)
   246     def is_running(name: String): Boolean = running.isDefinedAt(name)
   247 
   247 
   248     def stop_running(): Unit =
   248     def stop_running(): Unit =
   249       for (job <- running.valuesIterator; build <- job.build) build.cancel()
   249       for (job <- running.valuesIterator; build <- job.build) build.cancel()
   250 
   250 
   251     def finished_running(): List[Build_Job] =
   251     def finished_running(): List[(String, Build_Job)] =
   252       List.from(
   252       List.from(
   253         for (job <- running.valuesIterator; build <- job.build if build.is_finished)
   253         for (job <- running.valuesIterator; build <- job.build if build.is_finished)
   254         yield build)
   254         yield job.name -> build)
   255 
   255 
   256     def add_running(job: Job): State =
   256     def add_running(job: Job): State =
   257       copy(running = running + (job.name -> job))
   257       copy(running = running + (job.name -> job))
   258 
   258 
   259     def remove_running(name: String): State =
   259     def remove_running(name: String): State =
   991   }
   991   }
   992 
   992 
   993 
   993 
   994   /* build process roles */
   994   /* build process roles */
   995 
   995 
       
   996   final def is_session_name(job_name: String): Boolean = !Long_Name.is_qualified(job_name)
       
   997 
   996   final def start_build(): Unit = synchronized_database {
   998   final def start_build(): Unit = synchronized_database {
   997     for (db <- _database) {
   999     for (db <- _database) {
   998       Build_Process.Data.start_build(db, build_uuid, build_context.ml_platform,
  1000       Build_Process.Data.start_build(db, build_uuid, build_context.ml_platform,
   999         build_context.sessions_structure.session_prefs, progress.stopped)
  1001         build_context.sessions_structure.session_prefs, progress.stopped)
  1000     }
  1002     }
  1036       }
  1038       }
  1037 
  1039 
  1038     def start_job(): Boolean = synchronized_database {
  1040     def start_job(): Boolean = synchronized_database {
  1039       next_job(_state) match {
  1041       next_job(_state) match {
  1040         case Some(name) =>
  1042         case Some(name) =>
  1041           if (Build_Job.is_session_name(name)) {
  1043           if (is_session_name(name)) {
  1042             _state = start_session(_state, name)
  1044             _state = start_session(_state, name)
  1043             true
  1045             true
  1044           }
  1046           }
  1045           else error("Unsupported build job name " + quote(name))
  1047           else error("Unsupported build job name " + quote(name))
  1046         case None => false
  1048         case None => false
  1062       try {
  1064       try {
  1063         while (!finished()) {
  1065         while (!finished()) {
  1064           synchronized_database {
  1066           synchronized_database {
  1065             if (progress.stopped) _state.stop_running()
  1067             if (progress.stopped) _state.stop_running()
  1066 
  1068 
  1067             for (build <- _state.finished_running()) {
  1069             for ((job_name, build) <- _state.finished_running()) {
  1068               val job_name = build.job_name
       
  1069               val (process_result, output_shasum) = build.join
  1070               val (process_result, output_shasum) = build.join
  1070               _state = _state.
  1071               _state = _state.
  1071                 remove_pending(job_name).
  1072                 remove_pending(job_name).
  1072                 remove_running(job_name).
  1073                 remove_running(job_name).
  1073                 make_result(job_name, process_result, output_shasum, node_info = build.node_info)
  1074                 make_result(job_name, process_result, output_shasum, node_info = build.node_info)