Browse Source

add functions `system_tmpdir/0,1` and `reset_dir/1`

(in `rebar_file_utils`)
pull/101/head
alisdair sullivan 10 years ago
parent
commit
0b21243eae
2 changed files with 117 additions and 1 deletions
  1. +31
    -1
      src/rebar_file_utils.erl
  2. +86
    -0
      test/rebar_file_utils_SUITE.erl

+ 31
- 1
src/rebar_file_utils.erl View File

@ -30,7 +30,10 @@
cp_r/2,
mv/2,
delete_each/1,
write_file_if_contents_differ/2]).
write_file_if_contents_differ/2,
system_tmpdir/0,
system_tmpdir/1,
reset_dir/1]).
-include("rebar.hrl").
@ -123,6 +126,33 @@ write_file_if_contents_differ(Filename, Bytes) ->
file:write_file(Filename, ToWrite)
end.
%% returns an os appropriate tmpdir given a path
-spec system_tmpdir() -> file:filename().
-spec system_tmpdir(PathComponents) -> file:filename() when
PathComponents :: [file:name()].
system_tmpdir() -> system_tmpdir([]).
system_tmpdir(PathComponents) ->
Tmp = case erlang:system_info(system_architecture) of
"win32" ->
"./tmp";
_SysArch ->
"/tmp"
end,
filename:join([Tmp|PathComponents]).
%% recursively removes a directory and then recreates the same
%% directory but empty
-spec reset_dir(Path) -> ok | {error, Reason} when
Path :: file:name(),
Reason :: file:posix().
reset_dir(Path) ->
%% delete the directory if it exists
_ = ec_file:remove(Path, [recursive]),
%% recreate the directory
filelib:ensure_dir(filename:join([Path, "dummy.beam"])).
%% ===================================================================
%% Internal functions
%% ===================================================================

+ 86
- 0
test/rebar_file_utils_SUITE.erl View File

@ -0,0 +1,86 @@
-module(rebar_file_utils_SUITE).
-export([all/0,
groups/0,
init_per_group/2,
end_per_group/2,
raw_tmpdir/1,
empty_tmpdir/1,
simple_tmpdir/1,
multi_tmpdir/1,
reset_nonexistent_dir/1,
reset_empty_dir/1,
reset_dir/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
-include_lib("kernel/include/file.hrl").
all() ->
[{group, tmpdir},
{group, reset_dir}].
groups() ->
[{tmpdir, [], [raw_tmpdir, empty_tmpdir, simple_tmpdir, multi_tmpdir]},
{reset_dir, [], [reset_nonexistent_dir, reset_empty_dir, reset_dir]}].
init_per_group(reset_dir, Config) ->
TmpDir = rebar_file_utils:system_tmpdir(["rebar_file_utils_SUITE", "resetable"]),
[{tmpdir, TmpDir}|Config];
init_per_group(_, Config) -> Config.
end_per_group(_, Config) -> Config.
raw_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir() of
"/tmp" -> ok;
"./tmp" -> ok
end.
empty_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir([]) of
"/tmp" -> ok;
"./tmp" -> ok
end.
simple_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir(["test"]) of
"/tmp/test" -> ok;
"./tmp/test" -> ok
end.
multi_tmpdir(_Config) ->
case rebar_file_utils:system_tmpdir(["a", "b", "c"]) of
"/tmp/a/b/c" -> ok;
"./tmp/a/b/c" -> ok
end.
reset_nonexistent_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
?assertNot(filelib:is_dir(TmpDir)),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir_all(TmpDir).
reset_empty_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
_ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
?assert(filelib:is_dir(TmpDir)),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir_all(TmpDir).
reset_dir(Config) ->
TmpDir = ?config(tmpdir, Config),
_ = ec_file:remove(TmpDir, [recursive]),
_ = filelib:ensure_dir(filename:join([TmpDir, "dummy.beam"])),
?assert(filelib:is_dir(TmpDir)),
lists:foreach(fun(Name) -> file:write_file(filename:join([TmpDir, Name]), <<>>) end,
["a", "b", "c"]),
lists:foreach(fun(File) -> ?assert(filelib:is_file(filename:join([TmpDir, File]))) end,
["a", "b", "c"]),
ok = rebar_file_utils:reset_dir(TmpDir),
?assert(filelib:is_dir(TmpDir)),
{ok, []} = file:list_dir_all(TmpDir).

Loading…
Cancel
Save