@@ -20,23 +20,27 @@ type entry = {
2020 ; last_build_date : int option
2121}
2222
23- type t = entry Path.Map .t
23+ type t = { entries : entry Path.Map .t ; trace : Trace .t }
2424
2525let entry ?last_build_date hashed_content dynamic_dependencies =
2626 { hashed_content; dynamic_dependencies; last_build_date }
2727
28- let empty = Path.Map. empty
29- let from_list = Path.Map. of_list
28+ let make ~entries ~trace = { entries; trace }
29+ let empty = make ~entries: Path.Map. empty ~trace: Trace. empty
30+
31+ let from_list ?(trace = Trace. empty) entries =
32+ let entries = entries |> Path.Map. of_list in
33+ make ~entries ~trace
3034
3135let update cache path ?(deps = Deps. empty) ~now content =
3236 let entry = entry ~last_build_date: now content deps in
33- Path.Map. add path entry cache
37+ { cache with entries = Path.Map. add path entry cache.entries }
3438
3539let get cache path =
3640 Option. map
3741 (fun { hashed_content; dynamic_dependencies; last_build_date } ->
3842 (hashed_content, dynamic_dependencies, last_build_date))
39- (Path.Map. find_opt path cache)
43+ (Path.Map. find_opt path cache.entries )
4044
4145let entry_to_sexp { hashed_content; dynamic_dependencies; last_build_date } =
4246 let open Sexp in
@@ -70,13 +74,13 @@ let entry_from_sexp sexp =
7074 make hashed_content potential_deps (Some lbd))
7175 | _ -> Error (Sexp. Invalid_sexp (sexp, " cache" ))
7276
73- let to_sexp cache =
77+ let to_sexp { entries; _ } =
7478 Path.Map. fold
7579 (fun key entry acc ->
7680 let k = Path. to_sexp key in
7781 let v = entry_to_sexp entry in
7882 Sexp. node [ k; v ] :: acc)
79- cache []
83+ entries []
8084 |> Sexp. node
8185
8286let key_value_from_sexp sexp =
@@ -95,7 +99,8 @@ let from_sexp sexp =
9599 Result. bind acc (fun acc ->
96100 line |> key_value_from_sexp |> Result. map (fun x -> x :: acc)))
97101 (Ok [] ) entries
98- |> Result. map Path.Map. of_list
102+ |> Result. map (fun e ->
103+ make ~entries: (Path.Map. of_list e) ~trace: Trace. empty)
99104 | _ -> Error (Sexp. Invalid_sexp (sexp, " cache" ))
100105
101106let entry_equal
@@ -113,17 +118,22 @@ let entry_equal
113118 && Deps. equal deps_a deps_b
114119 && Option. equal Int. equal lbd_a lbd_b
115120
116- let equal = Path.Map. equal entry_equal
121+ let equal { entries; trace } b =
122+ Path.Map. equal entry_equal entries b.entries && Trace. equal trace b.trace
117123
118124let pp_kv ppf (key , { hashed_content; dynamic_dependencies; last_build_date } ) =
119- Format. fprintf ppf " %a => deps: @[<v 0>%a@]@ hash:%s (%a)" Path. pp key Deps. pp
125+ Format. fprintf ppf " %a => deps: @[<v 0>%a@] hash:%s (%a)" Path. pp key Deps. pp
120126 dynamic_dependencies hashed_content
121127 (Format. pp_print_option Format. pp_print_int)
122128 last_build_date
123129
130+ let trace { trace; _ } = trace
131+ let mark cache path = { cache with trace = Trace. add path (trace cache) }
132+
124133let pp ppf cache =
125- Format. fprintf ppf " Cache [@[<v 0>%a@]]"
134+ Format. fprintf ppf " Cache [@[<v 0>%a@]]@ @[<v 1>%a@] "
126135 (Format. pp_print_list
127136 ~pp_sep: (fun ppf () -> Format. fprintf ppf " ;@ " )
128137 pp_kv)
129- (Path.Map. to_list cache)
138+ (Path.Map. to_list cache.entries)
139+ Trace. pp (trace cache)
0 commit comments