mirror of
https://github.com/correl/rebar.git
synced 2024-12-18 11:06:20 +00:00
Add support for command-specific env for hooks
This commit is contained in:
parent
85eb2957c3
commit
20dfd32c85
2 changed files with 26 additions and 17 deletions
|
@ -234,12 +234,15 @@ execute(Command, Modules, Config, ModuleFile) ->
|
||||||
%% responds to this command
|
%% responds to this command
|
||||||
erlang:put(operations, erlang:get(operations) + 1),
|
erlang:put(operations, erlang:get(operations) + 1),
|
||||||
|
|
||||||
|
%% Check for and get command specific environments
|
||||||
|
Env = setup_envs(Config, Modules),
|
||||||
|
|
||||||
%% Run the available modules
|
%% Run the available modules
|
||||||
apply_hooks(pre_hooks, Config, Command),
|
apply_hooks(pre_hooks, Config, Command, Env),
|
||||||
case catch(run_modules(TargetModules, Command,
|
case catch(run_modules(TargetModules, Command,
|
||||||
Config, ModuleFile)) of
|
Config, ModuleFile)) of
|
||||||
ok ->
|
ok ->
|
||||||
apply_hooks(post_hooks, Config, Command),
|
apply_hooks(post_hooks, Config, Command, Env),
|
||||||
ok;
|
ok;
|
||||||
{error, failed} ->
|
{error, failed} ->
|
||||||
?FAIL;
|
?FAIL;
|
||||||
|
@ -304,14 +307,19 @@ run_modules([Module | Rest], Command, Config, File) ->
|
||||||
{Module, Error}
|
{Module, Error}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
apply_hooks(Mode, Config, Command) ->
|
apply_hooks(Mode, Config, Command, Env) ->
|
||||||
Hooks = rebar_config:get_local(Config, Mode, []),
|
Hooks = rebar_config:get_local(Config, Mode, []),
|
||||||
lists:foreach(fun apply_hook/1,
|
lists:foreach(fun apply_hook/1,
|
||||||
[Hook || Hook <- Hooks, element(1, Hook) =:= Command]).
|
[{Env, Hook} || Hook <- Hooks, element(1, Hook) =:= Command]).
|
||||||
|
|
||||||
apply_hook({Command, Hook}) ->
|
apply_hook({Env, {Command, Hook}}) ->
|
||||||
Msg = lists:flatten(io_lib:format("Command [~p] failed!~n", [Command])),
|
Msg = lists:flatten(io_lib:format("Command [~p] failed!~n", [Command])),
|
||||||
rebar_utils:sh(Hook, [{abort_on_error, Msg}]).
|
rebar_utils:sh(Hook, [{env, Env}, {abort_on_error, Msg}]).
|
||||||
|
|
||||||
|
setup_envs(Config, Modules) ->
|
||||||
|
lists:flatten([M:setup_env(Config) ||
|
||||||
|
M <- Modules,
|
||||||
|
erlang:function_exported(M, setup_env, 1)]).
|
||||||
|
|
||||||
acc_modules(Modules, Command, Config, File) ->
|
acc_modules(Modules, Command, Config, File) ->
|
||||||
acc_modules(select_modules(Modules, Command, []),
|
acc_modules(select_modules(Modules, Command, []),
|
||||||
|
|
|
@ -27,7 +27,8 @@
|
||||||
-module(rebar_port_compiler).
|
-module(rebar_port_compiler).
|
||||||
|
|
||||||
-export([compile/2,
|
-export([compile/2,
|
||||||
clean/2]).
|
clean/2,
|
||||||
|
setup_env/1]).
|
||||||
|
|
||||||
-include("rebar.hrl").
|
-include("rebar.hrl").
|
||||||
|
|
||||||
|
@ -94,14 +95,7 @@ compile(Config, AppFile) ->
|
||||||
[] ->
|
[] ->
|
||||||
ok;
|
ok;
|
||||||
_ ->
|
_ ->
|
||||||
%% Extract environment values from the config (if specified) and
|
Env = setup_env(Config),
|
||||||
%% merge with the default for this operating system. This enables
|
|
||||||
%% max flexibility for users.
|
|
||||||
DefaultEnvs = filter_envs(default_env(), []),
|
|
||||||
PortEnvs = rebar_config:get_list(Config, port_envs, []),
|
|
||||||
OverrideEnvs = filter_envs(PortEnvs, []),
|
|
||||||
RawEnv = DefaultEnvs ++ OverrideEnvs ++ os_env(),
|
|
||||||
Env = expand_vars_loop(merge_each_var(RawEnv, [])),
|
|
||||||
|
|
||||||
%% One or more files are available for building.
|
%% One or more files are available for building.
|
||||||
%% Run the pre-compile hook, if necessary.
|
%% Run the pre-compile hook, if necessary.
|
||||||
|
@ -152,8 +146,15 @@ clean(Config, AppFile) ->
|
||||||
%% Run the cleanup script, if it exists
|
%% Run the cleanup script, if it exists
|
||||||
run_cleanup_hook(Config).
|
run_cleanup_hook(Config).
|
||||||
|
|
||||||
|
setup_env(Config) ->
|
||||||
|
%% Extract environment values from the config (if specified) and
|
||||||
|
%% merge with the default for this operating system. This enables
|
||||||
|
%% max flexibility for users.
|
||||||
|
DefaultEnvs = filter_envs(default_env(), []),
|
||||||
|
PortEnvs = rebar_config:get_list(Config, port_envs, []),
|
||||||
|
OverrideEnvs = filter_envs(PortEnvs, []),
|
||||||
|
RawEnv = DefaultEnvs ++ OverrideEnvs ++ os_env(),
|
||||||
|
expand_vars_loop(merge_each_var(RawEnv, [])).
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
|
|
Loading…
Reference in a new issue