Packages
rebar3_hex
1.4.0
7.1.0
7.0.11
7.0.10
7.0.9
7.0.8
7.0.7
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.11.9
6.11.8
6.11.7
6.11.6
6.11.5
6.11.4
6.11.3
6.11.2
6.11.1
6.11.0
6.10.3
6.10.2
6.10.1
6.10.0
6.9.6
6.9.5
6.9.4
6.9.3
6.9.2
6.9.1
6.9.0
6.8.0
6.7.0
6.6.0
6.5.0
6.4.0
6.3.0
6.2.0
6.1.0
6.0.0
4.1.0
4.0.0
3.1.0
3.0.0
2.5.1
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.0
1.10.0
1.9.1
1.9.0
1.8.1
1.8.0
1.7.2
1.7.1
1.7.0
1.6.3
1.6.1
1.6.0
1.5.0
1.4.0
1.3.0
1.2.0
1.1.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Hex.pm plugin for rebar3
Current section
Files
Jump to
Current section
Files
src/rebar3_hex_info.erl
-module(rebar3_hex_info).
-export([init/1
,do/1
,format_error/1]).
-include("rebar3_hex.hrl").
-define(PROVIDER, info).
-define(DEPS, []).
-define(ENDPOINT, "packages").
%% ===================================================================
%% Public API
%% ===================================================================
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
init(State) ->
Provider = providers:create([
{name, ?PROVIDER},
{module, ?MODULE},
{namespace, hex},
{bare, true},
{deps, ?DEPS},
{example, "rebar3 hex user <command>"},
{short_desc, "Prints hex package or system information"},
{desc, ""},
{opts, []}
]),
State1 = rebar_state:add_provider(State, Provider),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
case rebar_state:command_args(State) of
[] ->
general();
[Package] ->
package(Package);
[Package, Version] ->
release(Package, Version)
end,
{ok, State}.
-spec format_error(any()) -> iolist().
format_error(Reason) ->
io_lib:format("~p", [Reason]).
general() ->
ok.
package(Package) ->
case rebar3_hex_http:get(filename:join(?ENDPOINT, Package), []) of
{ok, Json} ->
ec_talk:say("~s", [Package]),
Releases = proplists:get_value(<<"releases">>, Json, []),
ec_talk:say(" Releases: ~s", [string:join([binary_to_list(proplists:get_value(<<"version">>, X)) || X <- Releases], ", ")]),
Meta = proplists:get_value(<<"meta">>, Json, []),
Contributors = proplists:get_value(<<"contributors">>, Meta, []),
ec_talk:say(" Contributors: ~s", [join(Contributors)]),
Licenses = proplists:get_value(<<"licenses">>, Meta, []),
ec_talk:say(" Licenses: ~s", [join(Licenses)]),
Links = proplists:get_value(<<"links">>, Meta, []),
ec_talk:say(" Links:\n ~s", [tup_list_join(Links)]),
Description = proplists:get_value(<<"description">>, Meta, []),
ec_talk:say(Description, []);
{error, 404} ->
rebar_api:error("No package with name ~s", [Package]);
_ ->
rebar_api:error("Failed to retrieve package information")
end.
release(Package, Version) ->
case rebar3_hex_http:get(filename:join([?ENDPOINT, Package, "releases", Version]), []) of
{ok, Json} ->
ec_talk:say("~s ~s", [Package, Version]),
Requirements = proplists:get_value(<<"requirements">>, Json, []),
ec_talk:say(" Dependencies:\n ~s", [req_join(Requirements)]);
{error, 404} ->
rebar_api:error("No package with name ~s", [Package]);
_ ->
rebar_api:error("Failed to retrieve package information")
end.
join(List) ->
string:join([binary_to_list(X) || X <- List], ", ").
tup_list_join(List) ->
string:join([binary_to_list(X)++": "++binary_to_list(Y) || {X, Y} <- List], "\n ").
req_join(List) ->
string:join([binary_to_list(X)++": "++binary_to_list(proplists:get_value(<<"requirement">>, Y)) || {X, Y} <- List], "\n ").