Add rebar_utils:find_files_by_ext/2,3

This finds files by extension, avoiding resource fork files
in Mac OS X.
This commit is contained in:
Tomas Abrahamsson 2014-12-31 03:46:13 +01:00
parent 83156cc1ef
commit a04530124f

View file

@ -34,6 +34,8 @@
sh_send/3, sh_send/3,
find_files/2, find_files/2,
find_files/3, find_files/3,
find_files_by_ext/2,
find_files_by_ext/3,
now_str/0, now_str/0,
ensure_dir/1, ensure_dir/1,
beam_to_mod/2, beam_to_mod/2,
@ -160,6 +162,28 @@ find_files(Dir, Regex, Recursive) ->
filelib:fold_files(Dir, Regex, Recursive, filelib:fold_files(Dir, Regex, Recursive,
fun(F, Acc) -> [F | Acc] end, []). fun(F, Acc) -> [F | Acc] end, []).
%% Find files by extension, for example ".erl", avoiding resource fork
%% files in OS X. Such files are named for example src/._xyz.erl
%% Such files may also appear with network filesystems on OS X.
%%
%% The Ext is really a regexp, with any leading dot implicitly
%% escaped, and anchored at the end of the string.
%%
find_files_by_ext(Dir, Ext) ->
find_files_by_ext(Dir, Ext, true).
find_files_by_ext(Dir, Ext, Recursive) ->
%% Convert simple extension to proper regex
EscapeDot = case Ext of
"." ++ _ ->
"\\";
_ ->
%% allow for other suffixes, such as _pb.erl
""
end,
ExtRe = "^[^._].*" ++ EscapeDot ++ Ext ++ [$$],
find_files(Dir, ExtRe, Recursive).
now_str() -> now_str() ->
{{Year, Month, Day}, {Hour, Minute, Second}} = calendar:local_time(), {{Year, Month, Day}, {Hour, Minute, Second}} = calendar:local_time(),
lists:flatten(io_lib:format("~4b/~2..0b/~2..0b ~2..0b:~2..0b:~2..0b", lists:flatten(io_lib:format("~4b/~2..0b/~2..0b ~2..0b:~2..0b:~2..0b",