summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav V. Kovalev <kovyl2404@gmail.com>2015-06-01 23:22:02 +0300
committerDaniel Widgren <daniel.widgren@gmail.com>2015-06-26 09:20:16 +0200
commit9ad39c979a5cf0aa9f831f6a7523f8afe1abcf2b (patch)
treed473a53c8c8cc2842d4038be98868895ff697b3f
parented0b8fca45b4399a08b1803210c92916e2a0ca44 (diff)
Fix windows-related issues
-rw-r--r--src/rebar_file_utils.erl15
-rw-r--r--src/rebar_prv_common_test.erl25
2 files changed, 24 insertions, 16 deletions
diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl
index ad30172..915da9a 100644
--- a/src/rebar_file_utils.erl
+++ b/src/rebar_file_utils.erl
@@ -120,21 +120,24 @@ mv(Source, Dest) ->
[{use_stdout, false}, abort_on_error]),
ok;
{win32, _} ->
- {ok, R} = rebar_utils:sh(
- ?FMT("move /y \"~s\" \"~s\" 1> nul",
+ Res = rebar_utils:sh(
+ ?FMT("robocopy /move /e \"~s\" \"~s\" 1> nul",
[filename:nativename(Source),
filename:nativename(Dest)]),
[{use_stdout, false}, return_on_error]),
- case R of
- [] ->
- ok;
- _ ->
+ case win32_robocopy_ok(Res) of
+ true -> ok;
+ false ->
{error, lists:flatten(
io_lib:format("Failed to move ~s to ~s~n",
[Source, Dest]))}
end
end.
+win32_robocopy_ok({ok, _}) -> true;
+win32_robocopy_ok({error, {Rc, _}}) when Rc<9, Rc==16 -> true;
+win32_robocopy_ok(_) -> false.
+
delete_each([]) ->
ok;
delete_each([File | Rest]) ->
diff --git a/src/rebar_prv_common_test.erl b/src/rebar_prv_common_test.erl
index 710922a..f76fdf5 100644
--- a/src/rebar_prv_common_test.erl
+++ b/src/rebar_prv_common_test.erl
@@ -345,22 +345,27 @@ reduce_path([_|Acc], [".."|Rest]) -> reduce_path(Acc, Rest);
reduce_path([], [".."|Rest]) -> reduce_path([], Rest);
reduce_path(Acc, [Component|Rest]) -> reduce_path([Component|Acc], Rest).
-remove_links(Path) ->
- case ec_file:is_dir(Path) of
- false -> ok;
- true -> remove_links1(Path)
- end.
-remove_links1(Path) ->
+remove_links(Path) ->
+ IsDir = ec_file:is_dir(Path),
case ec_file:is_symlink(Path) of
- true ->
+ true when IsDir ->
+ delete_dir_link(Path);
+ true ->
file:delete(Path);
false ->
- lists:foreach(fun(ChildPath) ->
- remove_links(ChildPath)
- end, sub_dirs(Path))
+ ec_file:is_dir(Path) andalso
+ lists:foreach(fun(ChildPath) ->
+ remove_links(ChildPath)
+ end, sub_dirs(Path))
end.
+delete_dir_link(Path) ->
+ case os:type() of
+ {unix, _} -> file:delete(Path);
+ {win32, _} -> file:del_dir(Path)
+ end.
+
sub_dirs(Path) ->
{ok, SubDirs} = file:list_dir(Path),
[filename:join(Path, SubDir) || SubDir <- SubDirs].