Packages
rebar3_hex
2.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_owner.erl
-module(rebar3_hex_owner).
-export([init/1,
do/1,
format_error/1]).
-include("rebar3_hex.hrl").
-define(PROVIDER, owner).
-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 owner"},
{short_desc, "Add, remove or list package owners"},
{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
["add", Package, Email] ->
add(Package, Email),
{ok, State};
["remove", Package, Email] ->
remove(Package, Email),
{ok, State};
["list", Package] ->
list(Package),
{ok, State};
Command ->
?PRV_ERROR({bad_command, Command})
end.
-spec format_error(any()) -> iolist().
format_error(Error) ->
io_lib:format("~p", [Error]).
add(Package, Email) ->
{ok, Auth} = rebar3_hex_config:auth(),
Path = filename:join([?ENDPOINT, Package, "owners", rebar3_hex_http:encode(Email)]),
case rebar3_hex_http:put(Path, [Auth], []) of
ok ->
ec_talk:say("Added ~s to ~s", [Email, Package]);
{error, Status, Error} ->
rebar_api:error("Unable to remove package ~p, ~p (~p)", [Package, Error, Status])
end.
remove(Package, Email) ->
{ok, Auth} = rebar3_hex_config:auth(),
Path = filename:join([?ENDPOINT, Package, "owners", rebar3_hex_http:encode(Email)]),
case rebar3_hex_http:delete(Path, [Auth]) of
ok ->
ec_talk:say("Removed ~s from ~s", [Email, Package]);
{error, Status} ->
rebar_api:error("Unable to remove package ~p (~p)", [Package, Status])
end.
list(Package) ->
{ok, Auth} = rebar3_hex_config:auth(),
case rebar3_hex_http:get(filename:join([?ENDPOINT, Package, "owners"]), [Auth]) of
{ok, Map} ->
Owners = [binary_to_list(maps:get(<<"email">>, Owner, <<"">>)) || Owner <- Map],
OwnersString = string:join(Owners, "\n"),
ec_talk:say("~s", [OwnersString]);
{error, 404} ->
rebar_api:error("No package with name ~s", [Package]);
_ ->
rebar_api:error("Failed to retrieve package information", [])
end.