diff --git a/app/dune b/app/dune index 2fe3b23..1a70a81 100644 --- a/app/dune +++ b/app/dune @@ -1,4 +1,4 @@ (executable (name main) - (public_name opam_graph) + (public_name opam-graph) (libraries cmdliner logs logs.fmt fmt.cli fmt.tty logs.cli opam-graph)) diff --git a/app/main.ml b/app/main.ml index d51fb19..efa567c 100644 --- a/app/main.ml +++ b/app/main.ml @@ -12,24 +12,39 @@ let read_file file = with _ -> invalid_arg ("Error opening file " ^ file) let jump () transitive file output_format = + let module G = Opam_graph in let switch = read_file file in let data = OpamFile.SwitchExport.read_from_string switch in match output_format with | `Text -> - let graph = Opam_graph.dependencies ~transitive data in - Format.printf "%a" Opam_graph.pp_graph graph + let graph = G.dependencies ~transitive data in + Format.printf "%a" G.pp_graph graph | `Dot -> - let graph = Opam_graph.dependencies ~transitive data in - let dot = Opam_graph.Render.Dot.of_graph graph in - Format.printf "%a" Opam_graph.Render.Dot.pp dot + let graph = G.dependencies ~transitive data in + let dot = G.Render.Dot.of_graph graph in + Format.printf "%a" G.Render.Dot.pp dot | `Dot_ui -> - let graph = Opam_graph.Ui.dependencies ~transitive data in - let dot = Opam_graph.Render.Dot.of_assoc graph in - Format.printf "%a" Opam_graph.Render.Dot.pp dot + let graph = G.Ui.dependencies ~transitive data in + let dot = G.Render.Dot.of_assoc graph in + Format.printf "%a" G.Render.Dot.pp dot | `Html -> - let graph = Opam_graph.Ui.dependencies ~transitive data in - let html = Opam_graph.Render.Html.of_assoc graph in - Format.printf "%a" Opam_graph.Render.Html.pp html + let graph = G.Ui.dependencies ~transitive data in + let sharing_stats = + data + |> G.dependencies ~transitive:false + |> G.calc_sharing_stats in + let override_css = "\ + .deps-svg-wrap {\ + background: rgb(60, 60, 87); \ + }\ + " + in + let html = + G.Render.Html.of_assoc + ~override_css + ~sharing_stats graph + in + Format.printf "%a" G.Render.Html.pp html let setup_log style_renderer level = Fmt_tty.setup_std_outputs ?style_renderer (); @@ -62,8 +77,15 @@ let file = Arg.(required & pos 0 (some file) None & info [ ] ~doc ~docv:"FILE") let cmd = - let term = Term.(const jump $ setup_log $ transitive $ file $ output_format) in - let info = Cmd.info "opam_graph" ~version:"%%VERSION%%" in + let term = Term.( + const jump + $ setup_log + $ transitive + $ file + $ output_format + ) in + let version = Fmt.str "%d" Opam_graph.visualization_version in + let info = Cmd.info "opam-graph" ~version in Cmd.v info term let () = Cmd.eval cmd |> exit diff --git a/src/opam_graph.ml b/src/opam_graph.ml index b9b5f9d..40942bc 100644 --- a/src/opam_graph.ml +++ b/src/opam_graph.ml @@ -1,4 +1,12 @@ +let visualization_version = 1 +(** Remember to increment this when anything changes that can affect the + visualization, e.g.: + * algorithm change + * UI change + * certain library-dependency changes +*) + let sprintf = Printf.sprintf module OSet = OpamPackage.Set