src/Pure/Tools/build.scala
changeset 66746 888a51e77c6e
parent 66745 e7ac579b883c
child 66747 f4c6c8a8f645
equal deleted inserted replaced
66745:e7ac579b883c 66746:888a51e77c6e
    22   /** auxiliary **/
    22   /** auxiliary **/
    23 
    23 
    24   /* persistent build info */
    24   /* persistent build info */
    25 
    25 
    26   sealed case class Session_Info(
    26   sealed case class Session_Info(
    27     imported_sources: List[String],
       
    28     sources: List[String],
    27     sources: List[String],
    29     input_heaps: List[String],
    28     input_heaps: List[String],
    30     output_heap: Option[String],
    29     output_heap: Option[String],
    31     return_code: Int)
    30     return_code: Int)
    32 
    31 
   373 
   372 
   374     /* session selection and dependencies */
   373     /* session selection and dependencies */
   375 
   374 
   376     val full_sessions = Sessions.load(build_options, dirs, select_dirs)
   375     val full_sessions = Sessions.load(build_options, dirs, select_dirs)
   377 
   376 
   378     def imported_sources_stamp(deps: Sessions.Deps, name: String): List[String] =
       
   379       deps.imported_sources(name).map(_.toString).sorted
       
   380 
       
   381     def sources_stamp(deps: Sessions.Deps, name: String): List[String] =
   377     def sources_stamp(deps: Sessions.Deps, name: String): List[String] =
   382       (full_sessions(name).meta_digest :: deps.sources(name)).map(_.toString).sorted
   378       (full_sessions(name).meta_digest :: deps.sources(name) ::: deps.imported_sources(name))
       
   379         .map(_.toString).sorted
   383 
   380 
   384     val (selected, selected_sessions, deps) =
   381     val (selected, selected_sessions, deps) =
   385     {
   382     {
   386       val (selected0, selected_sessions0) =
   383       val (selected0, selected_sessions0) =
   387         full_sessions.selection(
   384         full_sessions.selection(
   399             store.find_database(name) match {
   396             store.find_database(name) match {
   400               case Some(database) =>
   397               case Some(database) =>
   401                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   398                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   402                   case Some(build)
   399                   case Some(build)
   403                   if build.return_code == 0 &&
   400                   if build.return_code == 0 &&
   404                     build.imported_sources == imported_sources_stamp(deps0, name) &&
       
   405                     build.sources == sources_stamp(deps0, name) => None
   401                     build.sources == sources_stamp(deps0, name) => None
   406                   case _ => Some(name)
   402                   case _ => Some(name)
   407                 }
   403                 }
   408               case None => Some(name)
   404               case None => Some(name)
   409             })
   405             })
   535                   build_log =
   531                   build_log =
   536                     Build_Log.Log_File(name, process_result.out_lines).
   532                     Build_Log.Log_File(name, process_result.out_lines).
   537                       parse_session_info(
   533                       parse_session_info(
   538                         command_timings = true, ml_statistics = true, task_statistics = true),
   534                         command_timings = true, ml_statistics = true, task_statistics = true),
   539                   build =
   535                   build =
   540                     Session_Info(
   536                     Session_Info(sources_stamp(deps, name), input_heaps, heap_stamp,
   541                       imported_sources_stamp(deps, name),
       
   542                       sources_stamp(deps, name),
       
   543                       input_heaps,
       
   544                       heap_stamp,
       
   545                       process_result.rc)))
   537                       process_result.rc)))
   546             }
   538             }
   547 
   539 
   548             // messages
   540             // messages
   549             process_result.err_lines.foreach(progress.echo(_))
   541             process_result.err_lines.foreach(progress.echo(_))