Merge pull request #229 from tolbrino/tb-patch-env

Add REBAR to environment before executing hooks
This commit is contained in:
Tristan Sloughter 2014-06-13 19:25:21 -05:00
commit 9380583f6c
2 changed files with 21 additions and 2 deletions

View file

@ -496,8 +496,9 @@ run_modules([Module | Rest], Command, Config, File) ->
{Module, Error} {Module, Error}
end. end.
apply_hooks(Mode, Config, Command, Env) -> apply_hooks(Mode, Config, Command, Env0) ->
Hooks = rebar_config:get_local(Config, Mode, []), Hooks = rebar_config:get_local(Config, Mode, []),
Env = rebar_utils:patch_env(Config, Env0),
lists:foreach(fun apply_hook/1, lists:foreach(fun apply_hook/1,
[{Env, Hook} || Hook <- Hooks, [{Env, Hook} || Hook <- Hooks,
element(1, Hook) =:= Command orelse element(1, Hook) =:= Command orelse

View file

@ -54,7 +54,8 @@
src_dirs/1, src_dirs/1,
ebin_dir/0, ebin_dir/0,
base_dir/1, 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"). -include("rebar.hrl").
@ -338,6 +339,23 @@ processing_base_dir(Config, Dir) ->
AbsDir = filename:absname(Dir), AbsDir = filename:absname(Dir),
AbsDir =:= base_dir(Config). 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 %% Internal functions
%% ==================================================================== %% ====================================================================