let constraints packagelist =
let constraints_table = Hashtbl.create (List.length packagelist) in
List.iter (fun pkg ->
conj_iter constraints_table pkg.Packages.conflicts ;
conj_iter constraints_table pkg.Packages.breaks ;
conj_iter constraints_table pkg.Packages.provides ;
cnf_iter constraints_table pkg.Packages.depends;
cnf_iter constraints_table pkg.Packages.pre_depends
) packagelist
;
let h = Hashtbl.create (List.length packagelist) in
let elements hv =
let cmp (_,v1) (_,v2) = Version.compare v2 v1 in
List.sort ~cmp (
Hashtbl.fold (fun k _ acc ->
match k with
|None -> acc
|Some k -> k::acc
) hv []
)
in
Hashtbl.iter (fun n hv -> Hashtbl.add h n (elements hv)) constraints_table;
h