#!/usr/bin/env escript
%% -*- erlang -*-
-%%! -pa ebin
-record(state, {run_hooks = dict:new(),
run_fold_hooks = dict:new(),
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.
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]),
#!/usr/bin/env escript
%% -*- erlang -*-
-%%! -pa ebin
-compile([nowarn_unused_function]).
-record(state, {g_opts = #{} :: map(),
fun(File, {I, Acc}) ->
io:format("Progress: ~B% (~B/~B)\r",
[round(I*100/Total), I, Total]),
- AbsCode = get_code_from_beam(File),
- Acc2 = case is_behaviour(AbsCode, ejabberd_config) of
- true ->
- fold_opt(File, Fun, Acc, AbsCode);
- false ->
- fold_mod_opt(File, Fun, Acc, AbsCode)
- end,
- {I+1, Acc2}
+ 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 ->
+ fold_opt(File, Fun, Acc, AbsCode);
+ false ->
+ fold_mod_opt(File, Fun, Acc, AbsCode)
+ end,
+ {I+1, Acc2}
+ end
end, {0, State}, Paths1),
State1.
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
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]),