diff options
| author | Tristan Sloughter <t@crashfast.com> | 2016-01-08 21:59:55 -0600 | 
|---|---|---|
| committer | Tristan Sloughter <t@crashfast.com> | 2016-01-08 21:59:55 -0600 | 
| commit | 41fe2837b3dc7ccf5a563a416648c01f72706c50 (patch) | |
| tree | 42b6e0a60b1e742c50ec5773da84aa59a9d80d41 /src | |
| parent | e496cc8602d4f6706d1d1142331221f736ccb423 (diff) | |
| parent | b9b74173caab39bd548ed8c1f52a519817dd0ac0 (diff) | |
Merge pull request #999 from ferd/fix-windows-stuff
Fix windows stuff
Diffstat (limited to 'src')
| -rw-r--r-- | src/rebar_file_utils.erl | 16 | 
1 files changed, 12 insertions, 4 deletions
| diff --git a/src/rebar_file_utils.erl b/src/rebar_file_utils.erl index 8c57d19..0f84520 100644 --- a/src/rebar_file_utils.erl +++ b/src/rebar_file_utils.erl @@ -262,9 +262,11 @@ path_from_ancestor_(_, _)                     -> {error, badparent}.  %% reduce a filepath by removing all incidences of `.' and `..'  -spec canonical_path(string()) -> string(). -canonical_path(Dir) -> canonical_path([], filename:split(filename:absname(Dir))). +canonical_path(Dir) -> +    Canon = canonical_path([], filename:split(filename:absname(Dir))), +    filename:nativename(Canon). -canonical_path([], [])                -> filename:nativename("/"); +canonical_path([], [])                -> filename:absname("/");  canonical_path(Acc, [])               -> filename:join(lists:reverse(Acc));  canonical_path(Acc, ["."|Rest])       -> canonical_path(Acc, Rest);  canonical_path([_|Acc], [".."|Rest])  -> canonical_path(Acc, Rest); @@ -283,13 +285,19 @@ delete_each_dir_win32([Dir | Rest]) ->      delete_each_dir_win32(Rest).  xcopy_win32(Source,Dest)-> -    %% "xcopy \"~s\" \"~s\" /q /y /e 2> nul", Chanegd to robocopy to +    %% "xcopy \"~s\" \"~s\" /q /y /e 2> nul", Changed to robocopy to      %% handle long names. May have issues with older windows.      Cmd = case filelib:is_dir(Source) of                true -> +                  %% For robocopy, copying /a/b/c/ to /d/e/f/ recursively does not +                  %% create /d/e/f/c/*, but rather copies all files to /d/e/f/*. +                  %% The usage we make here expects the former, not the later, so we +                  %% must manually add the last fragment of a directory to the `Dest` +                  %% in order to properly replicate POSIX platforms +                  NewDest = filename:join([Dest, filename:basename(Source)]),                    ?FMT("robocopy \"~s\" \"~s\" /e /is 1> nul",                         [rebar_utils:escape_double_quotes(filename:nativename(Source)), -                        rebar_utils:escape_double_quotes(filename:nativename(Dest))]); +                        rebar_utils:escape_double_quotes(filename:nativename(NewDest))]);                false ->                    ?FMT("robocopy \"~s\" \"~s\" \"~s\" /e /is 1> nul",                         [rebar_utils:escape_double_quotes(filename:nativename(filename:dirname(Source))), | 
