rabbitmq-server/tools/erlang_app_equal

69 lines
2.0 KiB
Erlang
Executable File

#!/usr/bin/env escript
%% -*- erlang -*-
%%! -nocookie
-mode(compile).
main([Left, Right]) ->
{ok, LeftMetadata} = file:consult(Left),
{ok, RightMetadata} = file:consult(Right),
compare(LeftMetadata, RightMetadata),
halt();
main(_) ->
halt(1).
compare(LeftMetadata, RightMetadata) ->
[{application, LeftApp, LeftProps}] = LeftMetadata,
[{application, RightApp, RightProps}] = RightMetadata,
assert_equal(LeftApp, RightApp, "application name"),
LeftId = proplists:get_value(id, LeftProps),
RightId = proplists:get_value(id, RightProps),
case LeftId of
RightId ->
ok;
_ ->
io:format(standard_error,
"Warning:\t 'id' does not match (~p != ~p)~n", [LeftId, RightId])
end,
LeftPropsMap = proplists:to_map(proplists:delete(id, LeftProps)),
RightPropsMap = proplists:to_map(proplists:delete(id, RightProps)),
assert_equal(
lists:sort(maps:keys(LeftPropsMap)),
lists:sort(maps:keys(RightPropsMap)),
"app property keys"
),
[case K of
K when K =:= applications orelse K =:= modules ->
assert_equal(
lists:sort(maps:get(K, LeftPropsMap)),
lists:sort(maps:get(K, RightPropsMap)),
K
);
env ->
assert_equal(
proplists:to_map(maps:get(K, LeftPropsMap)),
proplists:to_map(maps:get(K, RightPropsMap)),
K
);
_ ->
assert_equal(
maps:get(K, LeftPropsMap),
maps:get(K, RightPropsMap),
K
)
end || K <- lists:sort(maps:keys(LeftPropsMap))],
ok.
assert_equal(Expected, Actual, Context) ->
case Actual of
Expected ->
ok;
_ ->
io:format(standard_error,
"Expected:\t~p~n But got:\t~p~n For:\t~p~n", [Expected, Actual, Context]),
erlang:error(assertion_failed)
end.