diff options
author | Tristan Sloughter <tristan.sloughter@gmail.com> | 2014-06-13 19:25:21 -0500 |
---|---|---|
committer | Tristan Sloughter <tristan.sloughter@gmail.com> | 2014-06-13 19:25:21 -0500 |
commit | 9380583f6c27b30e1e2a5aa16d681f2e1b6c00c3 (patch) | |
tree | d596d93c56aa8304df89ce9e60311be98cb949cd /src | |
parent | 3297ffec2c89c6b7135165b4bfaeaeb07167c33c (diff) | |
parent | 9c23dfef72c381d93e3d7843700a2e9949c6e31e (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.erl | 3 | ||||
-rw-r--r-- | src/rebar_utils.erl | 20 |
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 %% ==================================================================== |