src/Pure/Tools/build.scala
changeset 68212 5a59fded83c7
parent 68209 aeffd8f1f079
child 68213 bb93511c7e8f
equal deleted inserted replaced
68211:1e7defef8c8a 68212:5a59fded83c7
   593 
   593 
   594                 val do_output = build_heap || Sessions.is_pure(name) || queue.is_inner(name)
   594                 val do_output = build_heap || Sessions.is_pure(name) || queue.is_inner(name)
   595 
   595 
   596                 val (current, heap_stamp) =
   596                 val (current, heap_stamp) =
   597                 {
   597                 {
   598                   store.find_database_heap(name) match {
   598                   store.try_open_database(name) match {
   599                     case Some((database, heap_stamp)) =>
   599                     case Some(db) =>
   600                       using(SQLite.open_database(database))(store.read_build(_, name)) match {
   600                       try {
   601                         case Some(build) =>
   601                         store.read_build(db, name) match {
   602                           val current =
   602                           case Some(build) =>
   603                             !fresh_build &&
   603                             val heap_stamp = store.find_heap_digest(name)
   604                             build.ok &&
   604                             val current =
   605                             build.sources == sources_stamp(deps, name) &&
   605                               !fresh_build &&
   606                             build.input_heaps == ancestor_heaps &&
   606                               build.ok &&
   607                             build.output_heap == heap_stamp &&
   607                               build.sources == sources_stamp(deps, name) &&
   608                             !(do_output && heap_stamp.isEmpty)
   608                               build.input_heaps == ancestor_heaps &&
   609                           (current, heap_stamp)
   609                               build.output_heap == heap_stamp &&
   610                         case None => (false, None)
   610                               !(do_output && heap_stamp.isEmpty)
   611                       }
   611                             (current, heap_stamp)
       
   612                           case None => (false, None)
       
   613                         }
       
   614                       } finally { db.close }
   612                     case None => (false, None)
   615                     case None => (false, None)
   613                   }
   616                   }
   614                 }
   617                 }
   615                 val all_current = current && ancestor_results.forall(_.current)
   618                 val all_current = current && ancestor_results.forall(_.current)
   616 
   619