Respect the --config switch when given

Currently the --config switch does not work because when loading
a new rebar config the global setting is ignored for all paths.
This patch provides a check when loading new rebar config to see
whether or not the current config path matches the `base_dir` set in
global conf, which produces the expected behaviour.
This commit is contained in:
Tim Watson 2011-08-01 08:12:36 +01:00 committed by Tuncer Ayaz
parent da31f90d1d
commit 5bb536f839
5 changed files with 49 additions and 13 deletions

View file

@ -0,0 +1 @@
{erl_opts, [warnings_as_errors]}.

View file

@ -0,0 +1,6 @@
-module(custom_config).
-compile(export_all).
test() ->
ok.

View file

@ -0,0 +1,31 @@
-module(t_custom_config_rt).
-compile(export_all).
-include_lib("eunit/include/eunit.hrl").
files() ->
[{copy, "custom.config", "custom.config"},
{create, "ebin/custom_config.app", app(custom_config, [custom_config])}].
run(Dir) ->
retest_log:log(debug, "Running in Dir: ~s~n", [Dir]),
Ref = retest:sh("rebar -C custom.config check-deps -v", [{async, true}]),
{ok, Captured} =
retest:sh_expect(Ref,
"DEBUG: Consult config file .*/custom.config.*",
[{capture, all, list}]),
retest_log:log(debug, "[CAPTURED]: ~s~n", [Captured]),
ok.
%%
%% Generate the contents of a simple .app file
%%
app(Name, Modules) ->
App = {application, Name,
[{description, atom_to_list(Name)},
{vsn, "1"},
{modules, Modules},
{registered, []},
{applications, [kernel, stdlib]}]},
io_lib:format("~p.\n", [App]).

View file

@ -108,9 +108,10 @@ run_aux(Commands) ->
false -> false ->
rebar_config:new() rebar_config:new()
end, end,
BaseConfig = rebar_config:base_config(GlobalConfig),
%% Process each command, resetting any state between each one %% Process each command, resetting any state between each one
rebar_core:process_commands(CommandAtoms, GlobalConfig). rebar_core:process_commands(CommandAtoms, BaseConfig).
%% %%
%% print help/usage string %% print help/usage string

View file

@ -26,7 +26,7 @@
%% ------------------------------------------------------------------- %% -------------------------------------------------------------------
-module(rebar_config). -module(rebar_config).
-export([new/0, new/1, -export([new/0, new/1, base_config/1,
get/3, get_local/3, get_list/3, get/3, get_local/3, get_list/3,
get_all/2, get_all/2,
set/3, set/3,
@ -48,9 +48,13 @@
%% Public API %% Public API
%% =================================================================== %% ===================================================================
base_config(#config{opts=Opts0}) ->
ConfName = rebar_config:get_global(config, "rebar.config"),
new(Opts0, ConfName).
new() -> new() ->
#config { dir = rebar_utils:get_cwd(), #config { dir = rebar_utils:get_cwd(),
opts = []}. opts = [] }.
new(ConfigFile) when is_list(ConfigFile) -> new(ConfigFile) when is_list(ConfigFile) ->
case consult_file(ConfigFile) of case consult_file(ConfigFile) of
@ -60,17 +64,10 @@ new(ConfigFile) when is_list(ConfigFile) ->
Other -> Other ->
?ABORT("Failed to load ~s: ~p~n", [ConfigFile, Other]) ?ABORT("Failed to load ~s: ~p~n", [ConfigFile, Other])
end; end;
new(#config{opts=Opts0}=ParentConfig)-> new(_ParentConfig=#config{opts=Opts0})->
%% If we are at the top level we might want to load another rebar.config new(Opts0, "rebar.config").
%% We can be certain that we are at the top level if we don't have any
%% configs yet since if we are at another level we must have some config.
ConfName = case ParentConfig of
{config, _, []} ->
rebar_config:get_global(config, "rebar.config");
_ ->
"rebar.config"
end,
new(Opts0, ConfName) ->
%% Load terms from rebar.config, if it exists %% Load terms from rebar.config, if it exists
Dir = rebar_utils:get_cwd(), Dir = rebar_utils:get_cwd(),
ConfigFile = filename:join([Dir, ConfName]), ConfigFile = filename:join([Dir, ConfName]),