562 SHA1.shasum_meta_info(SHA1.digest(Path.explode("$POLYML_EXE"))) |
562 SHA1.shasum_meta_info(SHA1.digest(Path.explode("$POLYML_EXE"))) |
563 } |
563 } |
564 else SHA1.flat_shasum(ancestor_results.map(_.output_shasum)) |
564 else SHA1.flat_shasum(ancestor_results.map(_.output_shasum)) |
565 |
565 |
566 val store_heap = build_context.store_heap(session_name) |
566 val store_heap = build_context.store_heap(session_name) |
567 val (current, output_shasum) = { |
567 |
568 store.try_open_database(session_name) match { |
568 val (current, output_shasum) = |
569 case Some(db) => |
569 store.check_output(session_name, |
570 using(db)(store.read_build(_, session_name)) match { |
570 sources_shasum = build_context.sources_shasum(session_name), |
571 case Some(build) => |
571 input_shasum = input_shasum, |
572 val output_shasum = store.find_heap_shasum(session_name) |
572 fresh_build = build_context.fresh_build, |
573 val current = |
573 store_heap = store_heap) |
574 !build_context.fresh_build && |
574 |
575 build.ok && |
|
576 build.sources == build_context.sources_shasum(session_name) && |
|
577 build.input_heaps == input_shasum && |
|
578 build.output_heap == output_shasum && |
|
579 !(store_heap && output_shasum.is_empty) |
|
580 (current, output_shasum) |
|
581 case None => (false, SHA1.no_shasum) |
|
582 } |
|
583 case None => (false, SHA1.no_shasum) |
|
584 } |
|
585 } |
|
586 val all_current = current && ancestor_results.forall(_.current) |
575 val all_current = current && ancestor_results.forall(_.current) |
587 |
576 |
588 if (all_current) { |
577 if (all_current) { |
589 state |
578 state |
590 .remove_pending(session_name) |
579 .remove_pending(session_name) |