summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Watson <watson.timothy@gmail.com>2011-08-01 08:12:36 +0100
committerTuncer Ayaz <tuncer.ayaz@gmail.com>2011-08-18 15:35:30 +0200
commit5bb536f83985dfb840cac7c59c5473af1cae12bb (patch)
tree6b0fec6be69f4f41d28b308730001c0092fdb342
parentda31f90d1dc1674c5ad1e084fce897e5fdd5f07b (diff)
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.
-rw-r--r--inttest/t_custom_config/custom.config1
-rw-r--r--inttest/t_custom_config/custom_config.erl6
-rw-r--r--inttest/t_custom_config/t_custom_config_rt.erl31
-rw-r--r--src/rebar.erl3
-rw-r--r--src/rebar_config.erl21
5 files changed, 49 insertions, 13 deletions
diff --git a/inttest/t_custom_config/custom.config b/inttest/t_custom_config/custom.config
new file mode 100644
index 0000000..6e6cd92
--- /dev/null
+++ b/inttest/t_custom_config/custom.config
@@ -0,0 +1 @@
+{erl_opts, [warnings_as_errors]}.
diff --git a/inttest/t_custom_config/custom_config.erl b/inttest/t_custom_config/custom_config.erl
new file mode 100644
index 0000000..8656201
--- /dev/null
+++ b/inttest/t_custom_config/custom_config.erl
@@ -0,0 +1,6 @@
+-module(custom_config).
+
+-compile(export_all).
+
+test() ->
+ ok.
diff --git a/inttest/t_custom_config/t_custom_config_rt.erl b/inttest/t_custom_config/t_custom_config_rt.erl
new file mode 100644
index 0000000..8a4e2ab
--- /dev/null
+++ b/inttest/t_custom_config/t_custom_config_rt.erl
@@ -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]).
diff --git a/src/rebar.erl b/src/rebar.erl
index c0c6c97..b6e0ce4 100644
--- a/src/rebar.erl
+++ b/src/rebar.erl
@@ -108,9 +108,10 @@ run_aux(Commands) ->
false ->
rebar_config:new()
end,
+ BaseConfig = rebar_config:base_config(GlobalConfig),
%% 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
diff --git a/src/rebar_config.erl b/src/rebar_config.erl
index 9d2acf3..06396d8 100644
--- a/src/rebar_config.erl
+++ b/src/rebar_config.erl
@@ -26,7 +26,7 @@
%% -------------------------------------------------------------------
-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_all/2,
set/3,
@@ -48,9 +48,13 @@
%% Public API
%% ===================================================================
+base_config(#config{opts=Opts0}) ->
+ ConfName = rebar_config:get_global(config, "rebar.config"),
+ new(Opts0, ConfName).
+
new() ->
#config { dir = rebar_utils:get_cwd(),
- opts = []}.
+ opts = [] }.
new(ConfigFile) when is_list(ConfigFile) ->
case consult_file(ConfigFile) of
@@ -60,17 +64,10 @@ new(ConfigFile) when is_list(ConfigFile) ->
Other ->
?ABORT("Failed to load ~s: ~p~n", [ConfigFile, Other])
end;
-new(#config{opts=Opts0}=ParentConfig)->
- %% If we are at the top level we might want to load another 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(_ParentConfig=#config{opts=Opts0})->
+ new(Opts0, "rebar.config").
+new(Opts0, ConfName) ->
%% Load terms from rebar.config, if it exists
Dir = rebar_utils:get_cwd(),
ConfigFile = filename:join([Dir, ConfName]),