Packages
rebar3_hex
2.1.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_utils.erl
-module(rebar3_hex_utils).
-export([update_app_src/2
,select_apps/1
,hex_home/0
,binarify/1
,expand_paths/2]).
-define(DEFAULT_HEX_DIR, ".hex").
update_app_src(App, Version) ->
AppSrcFile = rebar_app_info:app_file_src(App),
AppSrc = rebar_file_utils:try_consult(AppSrcFile),
[{application, Name, Details}] = AppSrc,
NewDetails = lists:keyreplace(vsn, 1, Details, {vsn, ec_cnv:to_list(Version)}),
{application, Name, NewDetails}.
select_apps([App]) ->
[App];
select_apps(Apps) ->
ec_talk:say("Select application(s):", []),
lists:foldl(fun(App, Idx) ->
ec_talk:say("~p) ~s", [Idx, rebar_app_info:name(App)]),
Idx+1
end, 1, Apps),
ec_talk:say("------------", []),
ec_talk:say("A) All", []),
case ec_talk:ask_default(io_lib:format("[1-~p] or (A)ll ", [length(Apps)]), string, "A") of
"A" ->
Apps;
Index ->
[lists:nth(list_to_integer(Index), Apps)]
end.
hex_home() ->
{ok, [[Home]]} = init:get_argument(home),
filename:join(Home, ?DEFAULT_HEX_DIR).
binarify(Term) when is_boolean(Term) ->
Term;
binarify(Term) when is_atom(Term) ->
atom_to_binary(Term, utf8);
binarify([]) ->
[];
binarify(Term) when is_list(Term) ->
case io_lib:printable_list(Term) of
true ->
list_to_binary(Term);
false ->
[binarify(X) || X <- Term]
end;
binarify({Key, Value}) ->
{binarify(Key), binarify(Value)};
binarify(Term) ->
Term.
expand_paths(Paths, Dir) ->
AbsDir = filename:absname(Dir),
Files = lists:flatmap(fun dir_files1/1, [filename:join(Dir, P) || P <- Paths]),
[{F1 -- (AbsDir++"/"), F1} || F1 <- filter_regular(Files)].
dir_files1(Dir) ->
lists:flatmap(fun(Y) -> dir_files(Y) end, filelib:wildcard(Dir)).
filter_regular(Files) ->
lists:filter(fun filelib:is_regular/1, [filename:absname(F) || F <- Files]).
dir_files(Path) ->
case filelib:is_dir(Path) of
true ->
filelib:wildcard(filename:join(Path, "**"));
false ->
[Path]
end.