|
|
@ -189,16 +189,27 @@ 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) == $/} of |
|
|
|
{true, true} -> |
|
|
|
rebar_string:trim(SourceStr, trailing, "/"); |
|
|
|
{true, false} -> |
|
|
|
SourceStr; |
|
|
|
{false, _} -> |
|
|
|
SourceStr |
|
|
|
end, |
|
|
|
% 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), |
|
|
|