src/Pure/Tools/build.scala
changeset 66747 f4c6c8a8f645
parent 66746 888a51e77c6e
child 66749 0445cfaf6132
equal deleted inserted replaced
66746:888a51e77c6e 66747:f4c6c8a8f645
    26   sealed case class Session_Info(
    26   sealed case class Session_Info(
    27     sources: List[String],
    27     sources: List[String],
    28     input_heaps: List[String],
    28     input_heaps: List[String],
    29     output_heap: Option[String],
    29     output_heap: Option[String],
    30     return_code: Int)
    30     return_code: Int)
       
    31   {
       
    32     def ok: Boolean = return_code == 0
       
    33   }
    31 
    34 
    32 
    35 
    33   /* queue with scheduling information */
    36   /* queue with scheduling information */
    34 
    37 
    35   private object Queue
    38   private object Queue
   395           selected0.flatMap(name =>
   398           selected0.flatMap(name =>
   396             store.find_database(name) match {
   399             store.find_database(name) match {
   397               case Some(database) =>
   400               case Some(database) =>
   398                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   401                 using(SQLite.open_database(database))(store.read_build(_, name)) match {
   399                   case Some(build)
   402                   case Some(build)
   400                   if build.return_code == 0 &&
   403                   if build.ok && build.sources == sources_stamp(deps0, name) => None
   401                     build.sources == sources_stamp(deps0, name) => None
       
   402                   case _ => Some(name)
   404                   case _ => Some(name)
   403                 }
   405                 }
   404               case None => Some(name)
   406               case None => Some(name)
   405             })
   407             })
   406         val (selected, selected_sessions) =
   408         val (selected, selected_sessions) =
   564                   store.find_database_heap(name) match {
   566                   store.find_database_heap(name) match {
   565                     case Some((database, heap_stamp)) =>
   567                     case Some((database, heap_stamp)) =>
   566                       using(SQLite.open_database(database))(store.read_build(_, name)) match {
   568                       using(SQLite.open_database(database))(store.read_build(_, name)) match {
   567                         case Some(build) =>
   569                         case Some(build) =>
   568                           val current =
   570                           val current =
   569                             build.return_code == 0 &&
   571                             build.ok &&
   570                             build.sources == sources_stamp(deps, name) &&
   572                             build.sources == sources_stamp(deps, name) &&
   571                             build.input_heaps == ancestor_heaps &&
   573                             build.input_heaps == ancestor_heaps &&
   572                             build.output_heap == heap_stamp &&
   574                             build.output_heap == heap_stamp &&
   573                             !(do_output && heap_stamp.isEmpty)
   575                             !(do_output && heap_stamp.isEmpty)
   574                           (current, heap_stamp)
   576                           (current, heap_stamp)