diff options
Diffstat (limited to 'tools/hook_deps.sh')
-rwxr-xr-x | tools/hook_deps.sh | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/tools/hook_deps.sh b/tools/hook_deps.sh index 4dca7f078..1ca4b4265 100755 --- a/tools/hook_deps.sh +++ b/tools/hook_deps.sh @@ -1,6 +1,5 @@ #!/usr/bin/env escript %% -*- erlang -*- -%%! -pa ebin -record(state, {run_hooks = dict:new(), run_fold_hooks = dict:new(), @@ -342,12 +341,16 @@ fold_beams(Fun, State, Paths) -> fun(File, {I, Acc}) -> io:format("Progress: ~B% (~B/~B)\r", [round(I*100/Total), I, Total]), - AbsCode = get_code_from_beam(File), - Acc2 = lists:foldl( - fun(Form, Acc1) -> - Fun(File, Form, Acc1) - end, Acc, AbsCode), - {I+1, Acc2} + case is_elixir_beam(File) of + true -> {I+1, Acc}; + false -> + AbsCode = get_code_from_beam(File), + Acc2 = lists:foldl( + fun(Form, Acc1) -> + Fun(File, Form, Acc1) + end, Acc, AbsCode), + {I+1, Acc2} + end end, {0, State}, Paths1), State1. @@ -356,17 +359,28 @@ fold_paths(Paths) -> fun(Path) -> case filelib:is_dir(Path) of true -> - lists:reverse( - filelib:fold_files( - Path, ".+\.beam\$", false, - fun(File, Acc) -> - [File|Acc] - end, [])); + Beams = lists:reverse( + filelib:fold_files( + Path, ".+\.beam\$", false, + fun(File, Acc) -> + [File|Acc] + end, [])), + case Beams of + [] -> ok; + _ -> code:add_path(Path) + end, + Beams; false -> [Path] end end, Paths). +is_elixir_beam(File) -> + case filename:basename(File) of + "Elixir" ++ _ -> true; + _ -> false + end. + get_code_from_beam(File) -> try {ok, {_, List}} = beam_lib:chunks(File, [abstract_code]), |