Pārlūkot izejas kodu

Fixed two tests for windows 8.1 and added touch functionality

pull/489/head
Daniel Widgren pirms 10 gadiem
revīziju iesūtīja Viacheslav Kovalev
vecāks
revīzija
a029e957fd
2 mainītis faili ar 39 papildinājumiem un 18 dzēšanām
  1. +34
    -15
      src/rebar_file_utils.erl
  2. +5
    -3
      test/rebar_compile_SUITE.erl

+ 34
- 15
src/rebar_file_utils.erl Parādīt failu

@ -36,10 +36,14 @@
write_file_if_contents_differ/2,
system_tmpdir/0,
system_tmpdir/1,
reset_dir/1]).
reset_dir/1,
touch/1]).
-include("rebar.hrl").
-include_lib("providers/include/providers.hrl").
-include_lib("kernel/include/file.hrl").
%% ===================================================================
%% Public API
@ -71,6 +75,11 @@ symlink_or_copy(Source, Target) ->
{error, eexist} ->
ok;
{error, _} ->
Target2 = case is_binary(Target) of
true -> unicode:characters_to_list(Target);
false -> Target
end,
rm_rf(Target2),
cp_r([Source], Target)
end.
@ -135,7 +144,7 @@ mv(Source, Dest) ->
end.
win32_robocopy_ok({ok, _}) -> true;
win32_robocopy_ok({error, {Rc, _}}) when Rc<9, Rc==16 -> true;
win32_robocopy_ok({error, {Rc, _}}) when Rc<9; Rc=:=16 -> true;
win32_robocopy_ok(_) -> false.
delete_each([]) ->
@ -189,6 +198,17 @@ reset_dir(Path) ->
%% recreate the directory
filelib:ensure_dir(filename:join([Path, "dummy.beam"])).
%% Linux touch but using erlang functions to work in bot *nix os and
%% windows
-spec touch(Path) -> ok | {error, Reason} when
Path :: file:name(),
Reason :: file:posix().
touch(Path) ->
{ok, A} = file:read_file_info(Path),
ok = file:write_file_info(Path, A#file_info{mtime = calendar:local_time(),
atime = calendar:local_time()}).
%% ===================================================================
%% Internal functions
%% ===================================================================
@ -201,28 +221,27 @@ delete_each_dir_win32([Dir | Rest]) ->
delete_each_dir_win32(Rest).
xcopy_win32(Source,Dest)->
{ok, R} = rebar_utils:sh(
?FMT("xcopy \"~s\" \"~s\" /q /y /e 2> nul",
%% "xcopy \"~s\" \"~s\" /q /y /e 2> nul", Chanegd to robocopy to
%% handle long names. May have issues with older windows.
Res = rebar_utils:sh(
?FMT("robocopy \"~s\" \"~s\" /e /is 2> nul",
[filename:nativename(Source), filename:nativename(Dest)]),
[{use_stdout, false}, return_on_error]),
case length(R) > 0 of
%% when xcopy fails, stdout is empty and and error message is printed
%% to stderr (which is redirected to nul)
true -> ok;
false ->
{error, lists:flatten(
io_lib:format("Failed to xcopy from ~s to ~s~n",
[Source, Dest]))}
case win32_robocopy_ok(Res) of
true -> ok;
false ->
{error, lists:flatten(
io_lib:format("Failed to copy ~s to ~s~n",
[Source, Dest]))}
end.
cp_r_win32({true, SourceDir}, {true, DestDir}) ->
%% from directory to directory
SourceBase = filename:basename(SourceDir),
ok = case file:make_dir(filename:join(DestDir, SourceBase)) of
ok = case file:make_dir(DestDir) of
{error, eexist} -> ok;
Other -> Other
end,
ok = xcopy_win32(SourceDir, filename:join(DestDir, SourceBase));
ok = xcopy_win32(SourceDir, DestDir);
cp_r_win32({false, Source} = S,{true, DestDir}) ->
%% from file to directory
cp_r_win32(S, {false, filename:join(DestDir, filename:basename(Source))});

+ 5
- 3
test/rebar_compile_SUITE.erl Parādīt failu

@ -163,9 +163,10 @@ recompile_when_hrl_changes(Config) ->
ModTime = [filelib:last_modified(filename:join([EbinDir, F]))
|| F <- Files, filename:extension(F) == ".beam"],
timer:sleep(1000),
os:cmd("touch " ++ HeaderFile),
rebar_file_utils:touch(HeaderFile),
rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
@ -274,9 +275,9 @@ delete_beam_if_source_deleted(Config) ->
rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
EbinDir = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
SrcDir = filename:join([AppDir, "_build", "default", "lib", Name, "src"]),
_SrcDir = filename:join([AppDir, "_build", "default", "lib", Name, "src"]),
?assert(filelib:is_regular(filename:join(EbinDir, "not_a_real_src_" ++ Name ++ ".beam"))),
file:delete(filename:join(SrcDir, "not_a_real_src_" ++ Name ++ ".erl")),
file:delete(filename:join([AppDir, "src", "not_a_real_src_" ++ Name ++ ".erl"])),
rebar_test_utils:run_and_check(Config, [], ["compile"], {ok, [{app, Name}]}),
@ -307,6 +308,7 @@ deps_in_path(Config) ->
?assertEqual([], [Path || Path <- code:get_path(),
{match, _} <- [re:run(Path, DepName)]]),
%% Hope not to find pkg name in there
?assertEqual([], [Path || Path <- code:get_path(),
{match, _} <- [re:run(Path, PkgName)]]),
%% Build things

Notiek ielāde…
Atcelt
Saglabāt