25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-24 16:23:40 +01:00

Ignore beams compiled by Elixir

This commit is contained in:
Evgeny Khramtsov 2019-06-14 23:35:51 +03:00
parent 56a0e736c7
commit ea76b87461
2 changed files with 56 additions and 28 deletions

View File

@ -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]),
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(
Beams = lists:reverse(
filelib:fold_files(
Path, ".+\.beam\$", false,
fun(File, Acc) ->
[File|Acc]
end, []));
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]),

View File

@ -1,6 +1,5 @@
#!/usr/bin/env escript
%% -*- erlang -*-
%%! -pa ebin
-compile([nowarn_unused_function]).
-record(state, {g_opts = #{} :: map(),
@ -495,6 +494,9 @@ fold_beams(Fun, State, Paths) ->
fun(File, {I, Acc}) ->
io:format("Progress: ~B% (~B/~B)\r",
[round(I*100/Total), I, Total]),
case is_elixir_beam(File) of
true -> {I+1, Acc};
false ->
AbsCode = get_code_from_beam(File),
Acc2 = case is_behaviour(AbsCode, ejabberd_config) of
true ->
@ -503,6 +505,7 @@ fold_beams(Fun, State, Paths) ->
fold_mod_opt(File, Fun, Acc, AbsCode)
end,
{I+1, Acc2}
end
end, {0, State}, Paths1),
State1.
@ -543,12 +546,17 @@ fold_paths(Paths) ->
fun(Path) ->
case filelib:is_dir(Path) of
true ->
lists:reverse(
Beams = lists:reverse(
filelib:fold_files(
Path, ".+\.beam\$", false,
fun(File, Acc) ->
[File|Acc]
end, []));
end, [])),
case Beams of
[] -> ok;
_ -> code:add_path(Path)
end,
Beams;
false ->
[Path]
end
@ -566,6 +574,12 @@ is_behaviour(AbsCode, Mod) ->
end
end, AbsCode).
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]),