summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_file_utils.erl19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl
index e3e7858..2a782f0 100644
--- a/src/rebar_file_utils.erl
+++ b/src/rebar_file_utils.erl
@@ -150,6 +150,25 @@ cp_r_win32({false, Source},{false, Dest}) ->
%% from file to file
{ok,_} = file:copy(Source, Dest),
ok;
+cp_r_win32({true, SourceDir}, {false, DestDir}) ->
+ case filelib:is_regular(DestDir) of
+ true ->
+ %% From directory to file? This shouldn't happen
+ {error, lists:flatten(
+ io_lib:format("Cannot copy dir (~p) to file (~p)\n",
+ [SourceDir, DestDir]))};
+ false ->
+ %% Specifying a target directory that doesn't currently exist.
+ %% So let's attempt to create this directory
+ case filelib:ensure_dir(filename:join(DestDir, "dummy")) of
+ ok ->
+ ok = xcopy_win32(SourceDir, DestDir);
+ {error, Reason} ->
+ {error, lists:flatten(
+ io_lib:format("Unable to create dir ~p: ~p\n",
+ [DestDir, Reason]))}
+ end
+ end;
cp_r_win32(Source,Dest) ->
Dst = {filelib:is_dir(Dest), Dest},
lists:foreach(fun(Src) ->