Welcome to mirror list, hosted at ThFree Co, Russian Federation.

override_opts.erl « plugins - github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1d321fc8772dd9b699a84104724e49c71b591cd8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
-module(override_opts).
-export([preprocess/2]).

override_opts(override, Config, Opts) ->
    lists:foldl(fun({Opt, Value}, Conf) ->
			rebar_config:set(Conf, Opt, Value)
		end, Config, Opts);
override_opts(add, Config, Opts) ->
    lists:foldl(fun({Opt, Value}, Conf) ->
			V = rebar_config:get_local(Conf, Opt, []),
			rebar_config:set(Conf, Opt, V ++ Value)
		end, Config, Opts).

preprocess(Config, _Dirs) ->
    Overrides = rebar_config:get_local(Config, overrides, []),
    TopOverrides = case rebar_config:get_xconf(Config, top_overrides, []) of
		  [] -> Overrides;
		  Val -> Val
	      end,
    Config2 = rebar_config:set_xconf(Config, top_overrides, TopOverrides),
    try
        Config3 = case rebar_app_utils:load_app_file(Config2, _Dirs) of
		  {ok, C, AppName, _AppData} ->
		      lists:foldl(fun({Type, AppName2, Opts}, Conf1) when
					    AppName2 == AppName ->
					  override_opts(Type, Conf1, Opts);
				     (_, Conf2) ->
					  Conf2
				  end, C, TopOverrides);
		  _ ->
		      Config2
	end,
	{ok, Config3, []}
    catch
        error:badarg -> {ok, Config2, []}
    end.