Module B00.Op_cache

module Op_cache: sig .. end

Operation cache.

An operation cache combines a file cache and a hash function to memoize build operations.

Note. File hashes performed by this module are cached.

Build operation cache

type t 

The type for build operation caches.

val create : ?clock:B0_std.Time.counter ->
?hash_fun:(module B0_std.Hash.T) -> B00.File_cache.t -> t

create ~clock ~hash_fun c is an operation cache with

val set_op_hash : t -> B00.Op.t -> (unit, string) Stdlib.result

set_op_hash t o hashes the operation o and stores the result in o with B00.Op.set_hash. Errors if an input file of the operation can't be hashed.

val revive : t ->
B00.Op.t -> (B0_std.Fpath.t list option, string) Stdlib.result

revive c o tries to revive operation o from the file cache using the key Op.hash o. In particular this:

  1. Recreates the files Op.writes o
  2. Sets o's execution information using the metadata hunk of the key. For example for spawn operations this also recovers the exit status code and standard output redirection contents into o.

The semantics of the result is like B00.File_cache.revive; in particular in case of Ok None the key nothing was revived.

Warning. In any case the fields B00.Op.exec_start_time, B00.Op.exec_end_time and Op.exec_status of o get set.

val add : t -> B00.Op.t -> (bool, string) Stdlib.result

add c o adds operation o to the cache. This associates the Op.writes o of o to the key Op.hash o and stores execution information of o in the key's metadata hunk. The semantics of the result is like B00.File_cache.add; in particular in case of Ok false it means some file in the set of writes do not exist and is likely an error.

val hash_fun : t -> (module B0_std.Hash.T)

hash_fun c is the hash function used by the operation cache.

val file_hashes : t -> B0_std.Hash.t B0_std.Fpath.Map.t

file_hashes c is a map of the files that were hashed.

val file_hash_dur : t -> B0_std.Time.span

file_hash_dur c is the time spent hashing files.