summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTristan Sloughter <tristan.sloughter@gmail.com>2014-06-13 19:25:21 -0500
committerTristan Sloughter <tristan.sloughter@gmail.com>2014-06-13 19:25:21 -0500
commit9380583f6c27b30e1e2a5aa16d681f2e1b6c00c3 (patch)
treed596d93c56aa8304df89ce9e60311be98cb949cd /src
parent3297ffec2c89c6b7135165b4bfaeaeb07167c33c (diff)
parent9c23dfef72c381d93e3d7843700a2e9949c6e31e (diff)
Merge pull request #229 from tolbrino/tb-patch-env
Add REBAR to environment before executing hooks
Diffstat (limited to 'src')
-rw-r--r--src/rebar_core.erl3
-rw-r--r--src/rebar_utils.erl20
2 files changed, 21 insertions, 2 deletions
diff --git a/src/rebar_core.erl b/src/rebar_core.erl
index 3a4f205..212365b 100644
--- a/src/rebar_core.erl
+++ b/src/rebar_core.erl
@@ -496,8 +496,9 @@ run_modules([Module | Rest], Command, Config, File) ->
{Module, Error}
end.
-apply_hooks(Mode, Config, Command, Env) ->
+apply_hooks(Mode, Config, Command, Env0) ->
Hooks = rebar_config:get_local(Config, Mode, []),
+ Env = rebar_utils:patch_env(Config, Env0),
lists:foreach(fun apply_hook/1,
[{Env, Hook} || Hook <- Hooks,
element(1, Hook) =:= Command orelse
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index c02d200..fa35fed 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -54,7 +54,8 @@
src_dirs/1,
ebin_dir/0,
base_dir/1,
- processing_base_dir/1, processing_base_dir/2]).
+ processing_base_dir/1, processing_base_dir/2,
+ patch_env/2]).
-include("rebar.hrl").
@@ -338,6 +339,23 @@ processing_base_dir(Config, Dir) ->
AbsDir = filename:absname(Dir),
AbsDir =:= base_dir(Config).
+%% @doc Returns the list of environment variables including 'REBAR' which points to the
+%% rebar executable used to execute the currently running command. The environment is
+%% not modified if rebar was invoked programmatically.
+-spec patch_env(rebar_config:config(), [{string(), string()}]) -> [{string(), string()}].
+patch_env(Config, []) ->
+ % if we reached an empty list the env did not contain the REBAR variable
+ case rebar_config:get_xconf(Config, escript, "") of
+ "" -> % rebar was invoked programmatically
+ [];
+ Path ->
+ [{"REBAR", Path}]
+ end;
+patch_env(_Config, [{"REBAR", _} | _]=All) ->
+ All;
+patch_env(Config, [E | Rest]) ->
+ [E | patch_env(Config, Rest)].
+
%% ====================================================================
%% Internal functions
%% ====================================================================