mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Refactor of rebar_config to facilitate identification of "local" config settings
This commit is contained in:
parent
8c85021c1e
commit
bd090f0db2
1 changed files with 30 additions and 11 deletions
|
@ -25,8 +25,9 @@
|
||||||
-module(rebar_config).
|
-module(rebar_config).
|
||||||
|
|
||||||
-export([new/0, new/1,
|
-export([new/0, new/1,
|
||||||
get/3, get_list/3,
|
get/3, get_local/3, get_list/3,
|
||||||
delete/2,
|
get_all/2,
|
||||||
|
set/3,
|
||||||
set_global/2, get_global/2,
|
set_global/2, get_global/2,
|
||||||
is_verbose/0]).
|
is_verbose/0]).
|
||||||
|
|
||||||
|
@ -50,24 +51,35 @@ new(ParentConfig) ->
|
||||||
ConfigFile = filename:join([Dir, "rebar.config"]),
|
ConfigFile = filename:join([Dir, "rebar.config"]),
|
||||||
case file:consult(ConfigFile) of
|
case file:consult(ConfigFile) of
|
||||||
{ok, Terms} ->
|
{ok, Terms} ->
|
||||||
Opts = Terms ++ ParentConfig#config.opts;
|
%% Found a config file with some terms. We need to be able to
|
||||||
|
%% distinguish between local definitions (i.e. from the file
|
||||||
|
%% in the cwd) and inherited definitions. To accomplish this,
|
||||||
|
%% we use a marker in the proplist (since order matters) between
|
||||||
|
%% the new and old defs.
|
||||||
|
Opts = Terms ++ [local] ++ [Opt || Opt <- ParentConfig#config.opts, Opt /= local];
|
||||||
{error, enoent} ->
|
{error, enoent} ->
|
||||||
Opts = ParentConfig#config.opts;
|
Opts = [local] ++ [Opt || Opt <- ParentConfig#config.opts, Opt /= local];
|
||||||
Other ->
|
Other ->
|
||||||
Opts = undefined, % Keep erlc happy
|
Opts = undefined, % Keep erlc happy
|
||||||
?WARN("Failed to load ~s: ~p\n", [ConfigFile, Other]),
|
?ABORT("Failed to load ~s: ~p\n", [ConfigFile, Other])
|
||||||
?FAIL
|
|
||||||
end,
|
end,
|
||||||
#config { dir = Dir, opts = Opts }.
|
#config { dir = Dir, opts = Opts }.
|
||||||
|
|
||||||
get_list(Config, Key, Default) ->
|
|
||||||
get(Config, Key, Default).
|
|
||||||
|
|
||||||
get(Config, Key, Default) ->
|
get(Config, Key, Default) ->
|
||||||
proplists:get_value(Key, Config#config.opts, Default).
|
proplists:get_value(Key, Config#config.opts, Default).
|
||||||
|
|
||||||
delete(Config, Key) ->
|
get_list(Config, Key, Default) ->
|
||||||
Config#config { opts = proplists:delete(Key, Config#config.opts) }.
|
get(Config, Key, Default).
|
||||||
|
|
||||||
|
get_local(Config, Key, Default) ->
|
||||||
|
proplists:get_value(Key, local_opts(Config#config.opts, []), Default).
|
||||||
|
|
||||||
|
get_all(Config, Key) ->
|
||||||
|
proplists:get_all_values(Key, Config#config.opts).
|
||||||
|
|
||||||
|
set(Config, Key, Value) ->
|
||||||
|
Opts = proplists:delete(Key, Config#config.opts),
|
||||||
|
Config#config { opts = [{Key, Value} | Opts] }.
|
||||||
|
|
||||||
set_global(Key, Value) ->
|
set_global(Key, Value) ->
|
||||||
application:set_env(rebar_global, Key, Value).
|
application:set_env(rebar_global, Key, Value).
|
||||||
|
@ -92,3 +104,10 @@ is_verbose() ->
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
|
|
||||||
|
local_opts([], Acc) ->
|
||||||
|
lists:reverse(Acc);
|
||||||
|
local_opts([local | _Rest], Acc) ->
|
||||||
|
lists:reverse(Acc);
|
||||||
|
local_opts([Item | Rest], Acc) ->
|
||||||
|
local_opts(Rest, [Item | Acc]).
|
||||||
|
|
Loading…
Reference in a new issue