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 |