B0_zero.ReviverBuild operation revivers.
An operation reviver combines a file cache and a hash function to record and revive the effect of build operations.
Note. Hashes performed on files by this module are cached.
val make : B0_std.Os.Mtime.counter -> (module B0_hash.T) -> File_cache.t -> tval clock : t -> B0_std.Os.Mtime.counterclock r is r's clock.
val file_cache : t -> File_cache.tfile_cache r is r's file cache.
val hash_file : t -> B0_std.Fpath.t -> (B0_hash.t, string) Stdlib.resulthash_op r o hashes the operation o. Errors if an input file of the build operation can't be hashed, this is most likely because an input file does not exist.
val file_hashes : t -> B0_hash.t B0_std.Fpath.Map.tfile_hashes r is a map of the files that were hashed.
val file_hash_dur : t -> B0_std.Mtime.Span.tfile_hash_dur r is the time spent hashing files.
record r o records operation o in the reviver r. This associates the Op.writes o of o to the key Op.hash o (i.e. this function assume o has gone through B0_zero.Op.set_hash before) and stores operation output information of o in the key's metadata hunk. The semantics of the result is like 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.
revive r o tries to revive operation o from r using the key Op.hash o (i.e. this function assume o has gone through B0_zero.Op.set_hash before). In particular:
Op.writes oo'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.If Ok true is returned the operation was revived. If Ok false is returned then nothing was revived and the file system is kept unchanged. Nothing is guaranteed in case of Error _.
Warning. The fields Op.time_started, Op.time_ended of o get set regardless of the result. This may be overwritten later by Exec.