diff options
| author | Viacheslav V. Kovalev <kovyl2404@gmail.com> | 2015-06-04 23:08:27 +0300 | 
|---|---|---|
| committer | Viacheslav Kovalev <kovyl2404@gmail.com> | 2015-06-26 11:24:02 +0300 | 
| commit | ab98bc15a8aac7a485e4823a098380b058821e4c (patch) | |
| tree | 98e4373d01f05573b50f67c344cfe540844b77b7 | |
| parent | 4a605faab8c717477e7b6912bf5d61018e448eb4 (diff) | |
Fix rebar_utils:sh on windows
| -rw-r--r-- | src/rebar_utils.erl | 14 | ||||
| -rw-r--r-- | test/rebar_utils_SUITE.erl | 17 | 
2 files changed, 24 insertions, 7 deletions
| diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl index cc59ed0..0cbc7c2 100644 --- a/src/rebar_utils.erl +++ b/src/rebar_utils.erl @@ -154,7 +154,7 @@ sh(Command0, Options0) ->      Command = lists:flatten(patch_on_windows(Command0, proplists:get_value(env, Options, []))),      PortSettings = proplists:get_all_values(port_settings, Options) ++ -        [exit_status, {line, 16384}, use_stdio, stderr_to_stdout, hide], +        [exit_status, {line, 16384}, use_stdio, stderr_to_stdout, hide, eof],      ?DEBUG("Port Cmd: ~s\nPort Opts: ~p\n", [Command, PortSettings]),      Port = open_port({spawn, Command}, PortSettings), @@ -435,10 +435,14 @@ sh_loop(Port, Fun, Acc) ->              sh_loop(Port, Fun, Fun(Line ++ "\n", Acc));          {Port, {data, {noeol, Line}}} ->              sh_loop(Port, Fun, Fun(Line, Acc)); -        {Port, {exit_status, 0}} -> -            {ok, lists:flatten(lists:reverse(Acc))}; -        {Port, {exit_status, Rc}} -> -            {error, {Rc, lists:flatten(lists:reverse(Acc))}} +        {Port, eof} -> +            Data = lists:flatten(lists:reverse(Acc)), +            receive +                {Port, {exit_status, 0}} -> +                    {ok, Data}; +                {Port, {exit_status, Rc}} -> +                    {error, {Rc, Data}} +            end      end.  beam_to_mod(Dir, Filename) -> diff --git a/test/rebar_utils_SUITE.erl b/test/rebar_utils_SUITE.erl index e9b32e2..76af5dd 100644 --- a/test/rebar_utils_SUITE.erl +++ b/test/rebar_utils_SUITE.erl @@ -21,7 +21,8 @@           task_with_flag_with_trailing_comma/1,           task_with_flag_with_commas/1,           task_with_multiple_flags/1, -         special_task_do/1]). +         special_task_do/1, +         sh_don_not_miss_messages/1]).  -include_lib("common_test/include/ct.hrl").  -include_lib("eunit/include/eunit.hrl"). @@ -29,7 +30,8 @@  all() -> -    [{group, args_to_tasks}]. +    [{group, args_to_tasks}, +     sh_don_not_miss_messages].  groups() ->      [{args_to_tasks, [], [empty_arglist, @@ -118,3 +120,14 @@ special_task_do(_Config) ->                                                                          "do",                                                                          "bar,",                                                                          "baz"]). +sh_don_not_miss_messages(_Config) -> +    Source = "~nmain(_) ->~n io:format(\"donotmissme\").~n", +    file:write_file("do_not_miss_messages", io_lib:format(Source,[])), +    {ok, "donotmissme"} = rebar_utils:sh("escript do_not_miss_messages", []), +    AnyMessageRemained = +        receive +            What -> What +        after 100 -> +            false +        end, +    AnyMessageRemained = false.
\ No newline at end of file | 
