浏览代码

Prevent crashes in `rebar3 as` with no tasks

checks on hd(...) and so on could not handle empty lists
pull/1356/head
Fred Hebert 8 年前
父节点
当前提交
504431473b
共有 2 个文件被更改,包括 20 次插入3 次删除
  1. +4
    -2
      src/rebar_prv_as.erl
  2. +16
    -1
      test/rebar_as_SUITE.erl

+ 4
- 2
src/rebar_prv_as.erl 查看文件

@ -33,9 +33,11 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
{Profiles, Tasks} = args_to_profiles_and_tasks(rebar_state:command_args(State)),
case Profiles of
[] ->
case {Profiles, Tasks} of
{[], _} ->
{error, "At least one profile must be specified when using `as`"};
{_, []} ->
{error, "At least one task must be specified when using `as`"};
_ ->
warn_on_empty_profile(Profiles, State),
State1 = rebar_state:apply_profiles(State, [list_to_atom(X) || X <- Profiles]),

+ 16
- 1
test/rebar_as_SUITE.erl 查看文件

@ -14,6 +14,7 @@
as_dir_name/1,
as_with_task_args/1,
warn_on_empty_profile/1,
error_on_empty_tasks/1,
clean_as_profile/1]).
-include_lib("common_test/include/ct.hrl").
@ -33,7 +34,7 @@ all() -> [as_basic, as_multiple_profiles, as_multiple_tasks,
as_multiple_profiles_multiple_tasks,
as_comma_placement, as_comma_then_space,
as_dir_name, as_with_task_args,
warn_on_empty_profile, clean_as_profile].
warn_on_empty_profile, error_on_empty_tasks, clean_as_profile].
as_basic(Config) ->
AppDir = ?config(apps, Config),
@ -159,6 +160,20 @@ warn_on_empty_profile(Config) ->
meck:unload(rebar_log),
ok.
error_on_empty_tasks(Config) ->
AppDir = ?config(apps, Config),
Name = rebar_test_utils:create_random_name("as_error_empty_"),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
meck:new(rebar_log, [passthrough]),
rebar_test_utils:run_and_check(Config,
[],
["as", "default"],
{error, "At least one task must be specified when using `as`"}),
ok.
warn_match(App, History) ->
lists:any(
fun({_, {rebar_log,log, [warn, "No entry for profile ~s in config.",

正在加载...
取消
保存