summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rebar.config4
-rw-r--r--rebar.lock8
-rw-r--r--src/rebar_prv_alias.erl69
-rw-r--r--test/rebar_alias_SUITE.erl27
4 files changed, 78 insertions, 30 deletions
diff --git a/rebar.config b/rebar.config
index dda579d..89aea8a 100644
--- a/rebar.config
+++ b/rebar.config
@@ -1,13 +1,13 @@
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ts=4 sw=4 ft=erlang et
-{deps, [{erlware_commons, "1.0.4"},
+{deps, [{erlware_commons, "1.0.5"},
{ssl_verify_fun, "1.1.3"},
{certifi, "2.0.0"},
{providers, "1.7.0"},
{getopt, "1.0.1"},
{bbmustache, "1.3.0"},
- {relx, "3.24.3"},
+ {relx, "3.24.4"},
{cf, "0.2.2"},
{cth_readable, "1.3.2"},
{eunit_formatters, "0.5.0"}]}.
diff --git a/rebar.lock b/rebar.lock
index 85df571..9bea7fa 100644
--- a/rebar.lock
+++ b/rebar.lock
@@ -3,11 +3,11 @@
{<<"certifi">>,{pkg,<<"certifi">>,<<"2.0.0">>},0},
{<<"cf">>,{pkg,<<"cf">>,<<"0.2.2">>},0},
{<<"cth_readable">>,{pkg,<<"cth_readable">>,<<"1.3.2">>},0},
- {<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.0.4">>},0},
+ {<<"erlware_commons">>,{pkg,<<"erlware_commons">>,<<"1.0.5">>},0},
{<<"eunit_formatters">>,{pkg,<<"eunit_formatters">>,<<"0.5.0">>},0},
{<<"getopt">>,{pkg,<<"getopt">>,<<"1.0.1">>},0},
{<<"providers">>,{pkg,<<"providers">>,<<"1.7.0">>},0},
- {<<"relx">>,{pkg,<<"relx">>,<<"3.24.3">>},0},
+ {<<"relx">>,{pkg,<<"relx">>,<<"3.24.4">>},0},
{<<"ssl_verify_fun">>,{pkg,<<"ssl_verify_fun">>,<<"1.1.3">>},0}]}.
[
{pkg_hash,[
@@ -15,10 +15,10 @@
{<<"certifi">>, <<"A0C0E475107135F76B8C1D5BC7EFB33CD3815CB3CF3DEA7AEFDD174DABEAD064">>},
{<<"cf">>, <<"7F2913FFF90ABCABD0F489896CFEB0B0674F6C8DF6C10B17A83175448029896C">>},
{<<"cth_readable">>, <<"44F963C27027EBE92BECBE3194FD9A3798507C7352E2C6F36950DE61CB3C8146">>},
- {<<"erlware_commons">>, <<"8F215709CCB8A99BC0436405CD78A8A92B84AD08969C2B926E239CC3B08AC4DC">>},
+ {<<"erlware_commons">>, <<"FC23D8E304140B65A811F653A76B2FB10B0CE744608CAF86E9125CEB349C9442">>},
{<<"eunit_formatters">>, <<"6A9133943D36A465D804C1C5B6E6839030434B8879C5600D7DDB5B3BAD4CCB59">>},
{<<"getopt">>, <<"C73A9FA687B217F2FF79F68A3B637711BB1936E712B521D8CE466B29CBF7808A">>},
{<<"providers">>, <<"BBF730563914328EC2511D205E6477A94831DB7297DE313B3872A2B26C562EAB">>},
- {<<"relx">>, <<"A7ADA05319D52791FC63BAC8027F464156B52A0453BA5DD09A9386BABF06AF26">>},
+ {<<"relx">>, <<"2132F0ABFA93DB3177E66768DB5A3D4141D4683BB4864B9DD4452EE7123DED07">>},
{<<"ssl_verify_fun">>, <<"6C49665D4326E26CD4A5B7BD54AA442B33DADFB7C5D59A0D0CD0BF5534BBFBD7">>}]}
].
diff --git a/src/rebar_prv_alias.erl b/src/rebar_prv_alias.erl
index 2a03668..736417b 100644
--- a/src/rebar_prv_alias.erl
+++ b/src/rebar_prv_alias.erl
@@ -70,33 +70,56 @@ example(Alias) ->
"rebar3 " ++ atom_to_list(Alias).
desc(Cmds) ->
- "Equivalent to running: rebar3 do " ++
- rebar_string:join(lists:map(fun({Cmd, Args}) ->
- atom_to_list(Cmd) ++ " " ++ Args;
- (Cmd) ->
- atom_to_list(Cmd)
- end, Cmds), ",").
+ "Equivalent to running: rebar3 do "
+ ++ rebar_string:join(lists:map(fun to_desc/1, Cmds), ",").
+
+to_desc({Cmd, Args}) ->
+ atom_to_list(Cmd) ++ " " ++ Args;
+to_desc(Cmd) ->
+ atom_to_list(Cmd).
module(Name) ->
- {attribute,1,module,Name}.
+ {attribute, 1, module, Name}.
exports() ->
- {attribute,1,export,[{do,1}]}.
+ {attribute, 1, export, [{do, 1}]}.
do_func(Cmds) ->
- {function,1,do,1,
- [{clause,1,
- [{var,1,'State'}],
+ {function, 1, do, 1,
+ [{clause, 1,
+ [{var, 1, 'State'}],
[],
- [{call,1,
- {remote,1,{atom,1,rebar_prv_do},{atom,1,do_tasks}},
- [to_args(Cmds),{var,1,'State'}]}]}]}.
-
-
-to_args([]) ->
- {nil,1};
-to_args([{Cmd, Args} | Rest]) ->
- {cons,1,{tuple,1,[{string,1,atom_to_list(Cmd)},{string,1,Args}]}, to_args(Rest)};
-to_args([Cmd | Rest]) ->
- {cons,1,{tuple,1,[{string,1,atom_to_list(Cmd)},{nil,1}]}, to_args(Rest)}.
-
+ [{call, 1,
+ {remote, 1, {atom, 1, rebar_prv_do}, {atom, 1, do_tasks}},
+ [make_args(Cmds), {var, 1, 'State'}]}]}]}.
+
+make_args(Cmds) ->
+ make_list(
+ lists:map(fun make_tuple/1,
+ lists:map(fun make_arg/1, Cmds))).
+
+make_arg({Cmd, Args}) ->
+ {make_string(Cmd), make_list([make_string(A) || A <- split_args(Args)])};
+make_arg(Cmd) ->
+ {make_string(Cmd), make_list([])}.
+
+make_tuple(Tuple) ->
+ {tuple, 1, tuple_to_list(Tuple)}.
+
+make_list(List) ->
+ lists:foldr(
+ fun(Elem, Acc) -> {cons, 1, Elem, Acc} end,
+ {nil, 1},
+ List).
+
+make_string(Atom) when is_atom(Atom) ->
+ make_string(atom_to_list(Atom));
+make_string(String) when is_list(String) ->
+ {string, 1, String}.
+
+%% In case someone used the long option format, the option needs to get
+%% separated from its value.
+split_args(Args) ->
+ rebar_string:lexemes(
+ lists:map(fun($=) -> 32; (C) -> C end, Args),
+ " ").
diff --git a/test/rebar_alias_SUITE.erl b/test/rebar_alias_SUITE.erl
index f889ae4..2544aac 100644
--- a/test/rebar_alias_SUITE.erl
+++ b/test/rebar_alias_SUITE.erl
@@ -13,7 +13,7 @@ init_per_testcase(_, Config) ->
end_per_testcase(_, _Config) ->
ok.
-all() -> [command, args, many, override_default, no_circular].
+all() -> [command, args, many, override_default, no_circular, release].
%% namespaces: unsupported, untested.
command() ->
@@ -111,3 +111,28 @@ no_circular(Config) ->
{error, [$C,$o,$m,$m,$a,$n,$d,$ ,"test",$ ,$n,$o,$t,$ ,
$f,$o,$u,$n,$d]}),
ok.
+
+release() ->
+ [{doc, "An alias for a release command"}].
+release(Config) ->
+ AppDir = ?config(apps, Config),
+
+ Name = rebar_test_utils:create_random_name("alias_release_"),
+ Vsn = rebar_test_utils:create_random_vsn(),
+ rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
+ RebarConfig = [{relx,
+ [{release, {skipped_release, Vsn}, []},
+ {release, {the_release, Vsn}, [list_to_atom(Name)]},
+ {lib_dirs, [AppDir]}]},
+ {alias,
+ [{the_rel1, [clean, {release, "-n the_release"}]},
+ {the_rel2, [clean, {release, "--relname=the_release"}]}]}],
+ rebar_test_utils:run_and_check(
+ Config, RebarConfig,
+ ["the_rel1"],
+ {ok, [{release, the_release, Vsn, false}]}),
+ rebar_test_utils:run_and_check(
+ Config, RebarConfig,
+ ["the_rel2"],
+ {ok, [{release, the_release, Vsn, false}]}),
+ ok.