B0_zero.Reviver
Build 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_std.Hash.T) ->
File_cache.t ->
t
val clock : t -> B0_std.Os.Mtime.counter
clock r
is r
's clock.
val hash_fun : t -> (module B0_std.Hash.T)
hash_fun r
is r
's hash function.
val file_cache : t -> File_cache.t
file_cache r
is r
's file cache.
val hash_string : t -> string -> B0_std.Hash.t
hash_string r s
hashes s
using r
's hash_fun
.
val hash_file : t -> B0_std.Fpath.t -> (B0_std.Hash.t, string) Stdlib.result
val hash_op : t -> Op.t -> (B0_std.Hash.t, string) Stdlib.result
hash_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_std.Hash.t B0_std.Fpath.Map.t
file_hashes r
is a map of the files that were hashed.
val file_hash_dur : t -> B0_std.Mtime.Span.t
file_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 o
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
.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
.