Packages
rebar3_hex
0.2.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).
-behaviour(provider).
-export([init/1
,do/1
,format_error/1]).
-include("rebar3_hex.hrl").
-include_lib("providers/include/providers.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, false},
{deps, ?DEPS},
{example, "rebar3 hex user <command>"},
{short_desc, "."},
{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 ").