diff options
Diffstat (limited to 'src/rebar_prv_deps.erl')
-rw-r--r-- | src/rebar_prv_deps.erl | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/rebar_prv_deps.erl b/src/rebar_prv_deps.erl index be81c31..dc356a8 100644 --- a/src/rebar_prv_deps.erl +++ b/src/rebar_prv_deps.erl @@ -24,16 +24,25 @@ init(State) -> {short_desc, "List dependencies"}, {desc, "List dependencies. Those not matching lock files " "are followed by an asterisk (*)."}, - {opts, []}])), + {opts, [{tree, $t, "tree", undefined, "Display package dependencies in tree format (git and hg deps not supported)."}]}])), {ok, State1}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> - Profiles = rebar_state:current_profiles(State), - List = [{Profile, rebar_state:get(State, {deps, Profile}, [])} - || Profile <- Profiles], - [display(State, Profile, Deps) || {Profile, Deps} <- List], - {ok, State}. + case display_tree(State) of + true -> + {_Packages, Graph} = rebar_state:packages(State), + List = merge_deps_per_profile(State), + {_SrcDeps, PkgDeps} = rebar_prv_install_deps:parse_deps("", List, State, [], 0), + rebar_digraph:print_solution(Graph, PkgDeps), + {ok, State}; + false -> + Profiles = rebar_state:current_profiles(State), + List = [{Profile, rebar_state:get(State, {deps, Profile}, [])} + || Profile <- Profiles], + [display(State, Profile, Deps) || {Profile, Deps} <- List], + {ok, State} + end. -spec format_error(any()) -> iolist(). format_error(Reason) -> @@ -116,3 +125,17 @@ display_dep(State, {Name, Source, Level}) when is_tuple(Source), is_integer(Leve ?CONSOLE("~s~s (locked ~s source)", [Name, NeedsUpdate, type(Source)]). type(Source) when is_tuple(Source) -> element(1, Source). + +display_tree(State) -> + {Args, _} = rebar_state:command_parsed_args(State), + proplists:get_value(tree, Args, false). + +merge_deps_per_profile(State) -> + Profiles = rebar_state:current_profiles(State), + lists:foldl(fun(Profile, Deps) -> + D = rebar_utils:deps_to_binary(rebar_state:get(State, {deps, Profile}, [])), + D1 = rebar_utils:tup_sort(D), + rebar_utils:tup_dedup( + rebar_utils:tup_umerge(D1 + ,Deps)) + end, [], Profiles). |