diff options
| author | Bryan Paxton <starbelly@pobox.com> | 2018-12-09 18:14:21 -0600 | 
|---|---|---|
| committer | Bryan Paxton <starbelly@pobox.com> | 2018-12-09 20:06:15 -0600 | 
| commit | 8e12c8b68ed5c3ad594665f77a67ae2d9960230f (patch) | |
| tree | abecc47780da61260bf987f3dc462dc9cdc5d00a /src | |
| parent | 8e28561d4e14ea85d42d17ab5a0f17f5f1c696d2 (diff) | |
strip trailing forward slash on recrusive cp for darwin
 - fixes systests on darwin where previously the recursive cp would fail
   due to everything being copied after the last forward slash.
   Specifically, everything in  `systest/all_SUITE_data/` would be
   copied but not `all_suite_data` dir itself which the tests expected.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rebar_file_utils.erl | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index a51a557..3b4e102 100644 --- a/src/rebar_file_utils.erl +++ b/src/rebar_file_utils.erl @@ -189,16 +189,28 @@ cp_r([], _Dest) ->      ok;  cp_r(Sources, Dest) ->      case os:type() of -        {unix, _} -> +        {unix, Os} ->              EscSources = [rebar_utils:escape_chars(Src) || Src <- Sources],              SourceStr = rebar_string:join(EscSources, " "), +            % On darwin the following cp command will cp everything inside +            % target vs target and everything inside, so we chop the last char +            % off if it is a '/' +            Source = case {Os == darwin, lists:last(SourceStr) == 47} of +                {true, true} -> +                    string:sub_string(SourceStr, 1, length(SourceStr) - 1); +                {true, false} -> +                    SourceStr; +                {false, _} -> +                    SourceStr +            end, +            EscSources = [rebar_utils:escape_chars(Src) || Src <- Sources],              % ensure destination exists before copying files into it              {ok, []} = rebar_utils:sh(?FMT("mkdir -p ~ts",                             [rebar_utils:escape_chars(Dest)]),                        [{use_stdout, false}, abort_on_error]),              {ok, []} = rebar_utils:sh(?FMT("cp -Rp ~ts \"~ts\"", -                                           [SourceStr, rebar_utils:escape_double_quotes(Dest)]), -                                      [{use_stdout, false}, abort_on_error]), +                                           [Source, rebar_utils:escape_double_quotes(Dest)]), +                                      [{use_stdout, true}, abort_on_error]),              ok;          {win32, _} ->              lists:foreach(fun(Src) -> ok = cp_r_win32(Src,Dest) end, Sources), | 
