diff options
-rw-r--r-- | src/rcl_prv_config.erl | 3 | ||||
-rw-r--r-- | src/rcl_state.erl | 14 | ||||
-rw-r--r-- | src/relcool.erl | 16 |
3 files changed, 32 insertions, 1 deletions
diff --git a/src/rcl_prv_config.erl b/src/rcl_prv_config.erl index 7a1cd19..ee1c770 100644 --- a/src/rcl_prv_config.erl +++ b/src/rcl_prv_config.erl @@ -82,7 +82,8 @@ load_terms({add_providers, Providers0}, {ok, State0}) -> ExistingProviders = rcl_state:providers(State1), {ok, rcl_state:providers(State1, ExistingProviders ++ Providers3)} end; - +load_terms({overrides, Overrides0}, {ok, State0}) -> + {ok, rcl_state:overrides(State0, Overrides0)}; load_terms({release, {RelName, Vsn}, Applications}, {ok, State0}) -> Release0 = rcl_release:new(RelName, Vsn), case rcl_release:goals(Release0, Applications) of diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 46c91c7..7397e6f 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -27,6 +27,8 @@ log/1, output_dir/1, lib_dirs/1, + overrides/1, + overrides/2, goals/1, config_files/1, providers/1, @@ -64,6 +66,7 @@ available_apps = [] :: [rcl_app_info:t()], default_release :: {rcl_release:name(), rcl_release:vsn()}, sys_config :: file:filename() | undefined, + overrides :: [{AppName::atom(), Directory::file:filename()}], releases :: ec_dictionary:dictionary({ReleaseName::atom(), ReleaseVsn::string()}, rcl_release:t()), @@ -96,10 +99,21 @@ new(PropList, Targets) when erlang:is_list(PropList) -> providers = [], releases=ec_dictionary:new(ec_dict), config_values=ec_dictionary:new(ec_dict), + overrides = proplists:get_value(overrides, PropList, []), default_release={proplists:get_value(relname, PropList, undefined), proplists:get_value(relvsn, PropList, undefined)}}, create_logic_providers(State0). +%% @doc the application overrides for the system +-spec overrides(t()) -> [{AppName::atom(), Directory::file:filename()}]. +overrides(#state_t{overrides=Overrides}) -> + Overrides. + +%% @doc the application overrides for the system +-spec overrides(t(), [{AppName::atom(), Directory::file:filename()}]) -> t(). +overrides(State, Overrides) -> + State#state_t{overrides=Overrides}. + %% @doc get the current log state for the system -spec log(t()) -> rcl_log:t(). log(#state_t{log=LogState}) -> diff --git a/src/relcool.erl b/src/relcool.erl index 44debc9..1c3ec02 100644 --- a/src/relcool.erl +++ b/src/relcool.erl @@ -22,6 +22,7 @@ -export([main/1, do/7, + do/8, format_error/1, opt_spec_list/0]). @@ -59,15 +60,30 @@ main(Args) -> %% @param OutputDir - The directory where the release should be built to %% @param Configs - The list of config files for the system do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Configs) -> + do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, [], Configs). + +%% @doc provides an API to run the Relcool process from erlang applications +%% +%% @param RelName - The release name to build (maybe `undefined`) +%% @param RelVsn - The release version to build (maybe `undefined`) +%% @param Goals - The release goals for the system in depsolver or Relcool goal +%% format +%% @param LibDirs - The library dirs that should be used for the system +%% @param OutputDir - The directory where the release should be built to +%% @param Overrides - A list of overrides for the system +%% @param Configs - The list of config files for the system +do(RelName, RelVsn, Goals, LibDirs, LogLevel, OutputDir, Overrides, Configs) -> State = rcl_state:new([{relname, RelName}, {relvsn, RelVsn}, {goals, Goals}, + {overrides, Overrides}, {output_dir, OutputDir}, {lib_dirs, LibDirs}, {log, rcl_log:new(LogLevel)}], Configs), run_relcool_process(rcl_state:caller(State, api)). + -spec opt_spec_list() -> [getopt:option_spec()]. opt_spec_list() -> [ |