From 8e12c8b68ed5c3ad594665f77a67ae2d9960230f Mon Sep 17 00:00:00 2001 From: Bryan Paxton Date: Sun, 9 Dec 2018 18:14:21 -0600 Subject: [PATCH 1/3] 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. --- src/rebar_file_utils.erl | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index a51a5579..3b4e1025 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), From 7a9f88790ea4799d3b6c3ec0a6e43f6827540177 Mon Sep 17 00:00:00 2001 From: Bryan Paxton Date: Mon, 10 Dec 2018 01:57:32 -0600 Subject: [PATCH 2/3] Remove dup quotation op --- src/rebar_file_utils.erl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index 3b4e1025..5b6164a5 100644 --- a/src/rebar_file_utils.erl +++ b/src/rebar_file_utils.erl @@ -203,7 +203,6 @@ cp_r(Sources, Dest) -> {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)]), From 67fef1fa2639e9565eb354234a389ad3b6501592 Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Wed, 23 Jan 2019 15:11:46 -0500 Subject: [PATCH 3/3] Safe unicode handling --- src/rebar_file_utils.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index 5b6164a5..0e0dfe34 100644 --- a/src/rebar_file_utils.erl +++ b/src/rebar_file_utils.erl @@ -195,9 +195,9 @@ cp_r(Sources, Dest) -> % 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 + Source = case {Os == darwin, lists:last(SourceStr) == $/} of {true, true} -> - string:sub_string(SourceStr, 1, length(SourceStr) - 1); + rebar_string:trim(SourceStr, trailing, "/"); {true, false} -> SourceStr; {false, _} ->