69 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Erlang
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			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.
 |