Browse Source

parse `rebar3 as foo, bar task` correctly

fixes #238
pull/239/head
alisdair sullivan 10 years ago
parent
commit
ba79fc0823
2 changed files with 28 additions and 9 deletions
  1. +12
    -8
      src/rebar_prv_as.erl
  2. +16
    -1
      test/rebar_as_SUITE.erl

+ 12
- 8
src/rebar_prv_as.erl View File

@ -51,19 +51,23 @@ args_to_profiles_and_tasks(Args) ->
first_profile([]) -> {[], []};
first_profile([ProfileList|Rest]) ->
case re:split(ProfileList, ",", [{return, list}, {parts, 2}]) of
%% profile terminated by comma
[P, More] -> profiles([More] ++ Rest, [P]);
%% profile not terminated by comma
[P] -> comma_or_end(Rest, [P])
%% `foo, bar`
[P, ""] -> profiles(Rest, [P]);
%% `foo,bar`
[P, More] -> profiles([More] ++ Rest, [P]);
%% `foo`
[P] -> comma_or_end(Rest, [P])
end.
profiles([], Acc) -> {lists:reverse(Acc), rebar_utils:args_to_tasks([])};
profiles([ProfileList|Rest], Acc) ->
case re:split(ProfileList, ",", [{return, list}, {parts, 2}]) of
%% profile terminated by comma
[P, More] -> profiles([More] ++ Rest, [P|Acc]);
%% profile not terminated by comma
[P] -> comma_or_end(Rest, [P|Acc])
%% `foo, bar`
[P, ""] -> profiles(Rest, [P|Acc]);
%% `foo,bar`
[P, More] -> profiles([More] ++ Rest, [P|Acc]);
%% `foo`
[P] -> comma_or_end(Rest, [P|Acc])
end.
%% `, foo...`

+ 16
- 1
test/rebar_as_SUITE.erl View File

@ -10,6 +10,7 @@
as_multiple_tasks/1,
as_multiple_profiles_multiple_tasks/1,
as_comma_placement/1,
as_comma_then_space/1,
as_dir_name/1]).
-include_lib("common_test/include/ct.hrl").
@ -26,7 +27,8 @@ init_per_testcase(_, Config) ->
rebar_test_utils:init_rebar_state(Config, "as_").
all() -> [as_basic, as_multiple_profiles, as_multiple_tasks,
as_multiple_profiles_multiple_tasks, as_comma_placement,
as_multiple_profiles_multiple_tasks,
as_comma_placement, as_comma_then_space,
as_dir_name].
as_basic(Config) ->
@ -89,6 +91,19 @@ as_comma_placement(Config) ->
["as", "foo,bar", ",", "baz", ",qux", "compile"],
{ok, [{app, Name}]}).
as_comma_then_space(Config) ->
AppDir = ?config(apps, Config),
Name = rebar_test_utils:create_random_name("as_comma_then_space_"),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
rebar_test_utils:run_and_check(Config,
[],
["as", "foo,", "bar,", "baz", "compile"],
{ok, [{app, Name}]}).
as_dir_name(Config) ->
AppDir = ?config(apps, Config),

Loading…
Cancel
Save