let dependency_graph_list ?(conjunctive=false) universe idlist =
let queue = Queue.create () in
let graph = G.create () in
let visited = Hashtbl.create (2 * (List.length idlist)) in
List.iter (fun e -> Queue.add e queue) idlist;
while (Queue.length queue > 0) do
let id = Queue.take queue in
let pkg = Cudf.package_by_uid universe id in
if not(Hashtbl.mem visited id) then begin
G.add_vertex graph id;
Hashtbl.add visited id ();
List.iter (fun vpkgs ->
match CudfAdd.resolve_vpkgs_int universe vpkgs with
|[i] when not(Hashtbl.mem visited i) -> begin
Queue.add i queue;
G.add_edge graph id i
end
|dsj when not conjunctive ->
List.iter (fun i ->
if not(Hashtbl.mem visited i) then begin
Queue.add i queue;
G.add_edge graph id i
end
) dsj
|_ -> ()
) pkg.Cudf.depends
end
done;
graph