From 902d2f4718f4eec674252cb5643c0dd137d741e0 Mon Sep 17 00:00:00 2001 From: Eric Date: Mon, 10 Dec 2012 15:03:49 -0500 Subject: support a setable root directory for the system --- src/rcl_state.erl | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 7397e6f..d324bf9 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -35,6 +35,8 @@ providers/2, sys_config/1, sys_config/2, + root_dir/1, + root_dir/2, add_release/2, get_release/3, update_release/2, @@ -57,6 +59,7 @@ cmd_args/0]). -record(state_t, {log :: rcl_log:t(), + root_dir :: file:name(), caller :: caller(), output_dir :: file:name(), lib_dirs=[] :: [file:name()], @@ -90,9 +93,10 @@ %% @doc Create a new 'log level' for the system -spec new(proplists:proplist(), [file:filename()] | file:filename()) -> t(). new(PropList, Targets) when erlang:is_list(PropList) -> + {ok, Root} = file:get_cwd(), State0 = #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), - output_dir=filename:absname(proplists:get_value(output_dir, PropList, "")), + output_dir=proplists:get_value(output_dir, PropList, ""), lib_dirs=get_lib_dirs(proplists:get_value(lib_dirs, PropList, [])), config_files=process_config_files(Targets), goals=proplists:get_value(goals, PropList, []), @@ -100,6 +104,7 @@ new(PropList, Targets) when erlang:is_list(PropList) -> releases=ec_dictionary:new(ec_dict), config_values=ec_dictionary:new(ec_dict), overrides = proplists:get_value(overrides, PropList, []), + root_dir = proplists:get_value(root_dir, PropList, Root), default_release={proplists:get_value(relname, PropList, undefined), proplists:get_value(relvsn, PropList, undefined)}}, create_logic_providers(State0). @@ -147,6 +152,14 @@ sys_config(#state_t{sys_config=SysConfig}) -> sys_config(State, SysConfig) -> State#state_t{sys_config=SysConfig}. +-spec root_dir(t()) -> file:filename() | undefined. +root_dir(#state_t{root_dir=RootDir}) -> + RootDir. + +-spec root_dir(t(), file:filename()) -> t(). +root_dir(State, RootDir) -> + State#state_t{root_dir=RootDir}. + -spec providers(t(), [rcl_provider:t()]) -> t(). providers(M, NewProviders) -> M#state_t{providers=NewProviders}. -- cgit v1.2.3 From c3e728afb67101480d0c7b52c51bc522f08fb08f Mon Sep 17 00:00:00 2001 From: Eric Date: Mon, 10 Dec 2012 15:04:12 -0500 Subject: if no config is specified search for a `relcool.config` in the path --- src/rcl_state.erl | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index d324bf9..bd26a47 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -31,6 +31,7 @@ overrides/2, goals/1, config_files/1, + config_files/2, providers/1, providers/2, sys_config/1, @@ -140,6 +141,10 @@ goals(#state_t{goals=TS}) -> config_files(#state_t{config_files=ConfigFiles}) -> ConfigFiles. +-spec config_files(t(), [file:filename()]) -> t(). +config_files(State, ConfigFiles) -> + State#state_t{config_files=ConfigFiles}. + -spec providers(t()) -> [rcl_provider:t()]. providers(#state_t{providers=Providers}) -> Providers. -- cgit v1.2.3 From abaaacbfcd0fa186cb05b89d7550a8b1fef7cace Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 26 Dec 2012 20:18:56 -0500 Subject: fix bug in goal spec --- src/rcl_state.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index bd26a47..21fbbb3 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -133,7 +133,7 @@ output_dir(#state_t{output_dir=OutDir}) -> lib_dirs(#state_t{lib_dirs=LibDir}) -> LibDir. --spec goals(t()) -> [rcl_depsolver:constraints()]. +-spec goals(t()) -> [rcl_depsolver:constraint()]. goals(#state_t{goals=TS}) -> TS. -- cgit v1.2.3 From 078d3c349b3f465dc2f45f0bbfcff297e82074e5 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 26 Dec 2012 20:19:54 -0500 Subject: overlay support This includes support for overlays and fairly complete tests --- src/rcl_state.erl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 21fbbb3..eb70ecc 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -280,9 +280,10 @@ create_logic_providers(State0) -> {ConfigProvider, {ok, State1}} = rcl_provider:new(rcl_prv_config, State0), {DiscoveryProvider, {ok, State2}} = rcl_provider:new(rcl_prv_discover, State1), {ReleaseProvider, {ok, State3}} = rcl_provider:new(rcl_prv_release, State2), - {AssemblerProvider, {ok, State4}} = rcl_provider:new(rcl_prv_assembler, State3), - State4#state_t{providers=[ConfigProvider, DiscoveryProvider, - ReleaseProvider, AssemblerProvider]}. + {OverlayProvider, {ok, State4}} = rcl_provider:new(rcl_prv_overlay, State3), + {AssemblerProvider, {ok, State5}} = rcl_provider:new(rcl_prv_assembler, State4), + State5#state_t{providers=[ConfigProvider, DiscoveryProvider, + ReleaseProvider, OverlayProvider, AssemblerProvider]}. %% @doc config files can come in as either a single file name or as a list of -- cgit v1.2.3 From 78ec90ae6084f44b5379bd4e9eebb79746f4a595 Mon Sep 17 00:00:00 2001 From: Eric Date: Sun, 30 Dec 2012 19:15:01 -0500 Subject: support only one config file in the system --- src/rcl_state.erl | 48 +++++++++++++----------------------------------- 1 file changed, 13 insertions(+), 35 deletions(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index eb70ecc..28effbd 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -30,8 +30,8 @@ overrides/1, overrides/2, goals/1, - config_files/1, - config_files/2, + config_file/1, + config_file/2, providers/1, providers/2, sys_config/1, @@ -64,7 +64,7 @@ caller :: caller(), output_dir :: file:name(), lib_dirs=[] :: [file:name()], - config_files=[] :: [file:filename()], + config_file=[] :: file:filename(), goals=[] :: [rcl_depsolver:constraint()], providers = [] :: [rcl_provider:t()], available_apps = [] :: [rcl_app_info:t()], @@ -93,13 +93,13 @@ %%============================================================================ %% @doc Create a new 'log level' for the system -spec new(proplists:proplist(), [file:filename()] | file:filename()) -> t(). -new(PropList, Targets) when erlang:is_list(PropList) -> +new(PropList, Target) when erlang:is_list(PropList) -> {ok, Root} = file:get_cwd(), State0 = #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), output_dir=proplists:get_value(output_dir, PropList, ""), - lib_dirs=get_lib_dirs(proplists:get_value(lib_dirs, PropList, [])), - config_files=process_config_files(Targets), + lib_dirs=proplists:get_value(lib_dirs, PropList, ""), + config_file=Target, goals=proplists:get_value(goals, PropList, []), providers = [], releases=ec_dictionary:new(ec_dict), @@ -137,13 +137,13 @@ lib_dirs(#state_t{lib_dirs=LibDir}) -> goals(#state_t{goals=TS}) -> TS. --spec config_files(t()) -> [file:filename()]. -config_files(#state_t{config_files=ConfigFiles}) -> +-spec config_file(t()) -> file:filename(). +config_file(#state_t{config_file=ConfigFiles}) -> ConfigFiles. --spec config_files(t(), [file:filename()]) -> t(). -config_files(State, ConfigFiles) -> - State#state_t{config_files=ConfigFiles}. +-spec config_file(t(), file:filename()) -> t(). +config_file(State, ConfigFiles) -> + State#state_t{config_file=ConfigFiles}. -spec providers(t()) -> [rcl_provider:t()]. providers(#state_t{providers=Providers}) -> @@ -243,15 +243,14 @@ format(Mod) -> -spec format(t(), non_neg_integer()) -> iolist(). format(#state_t{log=LogState, output_dir=OutDir, lib_dirs=LibDirs, caller=Caller, config_values=Values0, - goals=Goals, config_files=ConfigFiles, + goals=Goals, config_file=ConfigFile, providers=Providers}, Indent) -> Values1 = ec_dictionary:to_list(Values0), [rcl_util:indent(Indent), <<"state(">>, erlang:atom_to_list(Caller), <<"):\n">>, rcl_util:indent(Indent + 1), <<"log: ">>, rcl_log:format(LogState), <<",\n">>, - rcl_util:indent(Indent + 1), "config files: \n", - [[rcl_util:indent(Indent + 2), ConfigFile, ",\n"] || ConfigFile <- ConfigFiles], + rcl_util:indent(Indent + 1), "config file: ", ConfigFile, "\n", rcl_util:indent(Indent + 1), "goals: \n", [[rcl_util:indent(Indent + 2), rcl_depsolver:format_constraint(Goal), ",\n"] || Goal <- Goals], rcl_util:indent(Indent + 1), "output_dir: ", OutDir, "\n", @@ -265,15 +264,6 @@ format(#state_t{log=LogState, output_dir=OutDir, lib_dirs=LibDirs, %%%=================================================================== %%% Internal Functions %%%=================================================================== --spec get_lib_dirs([file:name()]) -> [file:name()]. -get_lib_dirs(CmdDirs) -> - case os:getenv("ERL_LIBS") of - false -> - CmdDirs; - EnvString -> - [Lib || Lib <- re:split(EnvString, ":|;"), - filelib:is_dir(Lib)] ++ CmdDirs - end. -spec create_logic_providers(t()) -> t(). create_logic_providers(State0) -> @@ -285,18 +275,6 @@ create_logic_providers(State0) -> State5#state_t{providers=[ConfigProvider, DiscoveryProvider, ReleaseProvider, OverlayProvider, AssemblerProvider]}. - -%% @doc config files can come in as either a single file name or as a list of -%% files. We what to support both where possible. -process_config_files(File = [Char | _]) - when erlang:is_integer(Char) -> - [File]; -process_config_files(Files = [File | _]) - when erlang:is_list(File) -> - Files; -process_config_files([]) -> - []. - %%%=================================================================== %%% Test Functions %%%=================================================================== -- cgit v1.2.3 From 3a5cb6adf215e760068c9d3e7a07eb4f971cabf0 Mon Sep 17 00:00:00 2001 From: Eric Date: Fri, 4 Jan 2013 10:33:54 -0500 Subject: provide the erlang lib dir and cwd as working libraries This happens for every call unless the user passes --disable-default-libs to relcool or {disable_default_libs, true} in the relcool config. --- src/rcl_state.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 28effbd..842b635 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -108,7 +108,9 @@ new(PropList, Target) when erlang:is_list(PropList) -> root_dir = proplists:get_value(root_dir, PropList, Root), default_release={proplists:get_value(relname, PropList, undefined), proplists:get_value(relvsn, PropList, undefined)}}, - create_logic_providers(State0). + rcl_state:put(create_logic_providers(State0), + disable_default_libs, + proplists:get_value(disable_default_libs, PropList, false)). %% @doc the application overrides for the system -spec overrides(t()) -> [{AppName::atom(), Directory::file:filename()}]. -- cgit v1.2.3 From e02d59de76a2f0c0e0311f22e4779652a1375ee9 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 24 Jan 2013 20:59:21 -0800 Subject: fix and normalize module headers --- src/rcl_state.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index 842b635..a2e6c66 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -1,4 +1,4 @@ -%%% -*- mode: Erlang; fill-column: 80; comment-column: 75; -*- +%% -*- erlang-indent-level: 4; indent-tabs-mode: nil; fill-column: 80 -*- %%% Copyright 2012 Erlware, LLC. All Rights Reserved. %%% %%% This file is provided to you under the Apache License, -- cgit v1.2.3 From 6c90453d79cd1e8cf35cb4f6ad4ee51d7be39e50 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 24 Jan 2013 21:03:53 -0800 Subject: convert relcool to take a config as a opt argument adds `-c ` or `--config ` instead of passing the config file as an argument. --- src/rcl_state.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index a2e6c66..ecf3115 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -62,6 +62,7 @@ -record(state_t, {log :: rcl_log:t(), root_dir :: file:name(), caller :: caller(), + action :: atom(), output_dir :: file:name(), lib_dirs=[] :: [file:name()], config_file=[] :: file:filename(), @@ -92,14 +93,17 @@ %% API %%============================================================================ %% @doc Create a new 'log level' for the system --spec new(proplists:proplist(), [file:filename()] | file:filename()) -> t(). -new(PropList, Target) when erlang:is_list(PropList) -> +-spec new(proplists:proplist(), atom()) -> t(). +new(PropList, Target) + when erlang:is_list(PropList), + erlang:is_atom(Target) -> {ok, Root} = file:get_cwd(), State0 = #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), output_dir=proplists:get_value(output_dir, PropList, ""), lib_dirs=proplists:get_value(lib_dirs, PropList, ""), - config_file=Target, + config_file=proplists:get_value(config, PropList, ""), + action = Target, goals=proplists:get_value(goals, PropList, []), providers = [], releases=ec_dictionary:new(ec_dict), @@ -286,7 +290,7 @@ create_logic_providers(State0) -> new_test() -> LogState = rcl_log:new(error), - RCLState = new([{log, LogState}], []), + RCLState = new([{log, LogState}], release), ?assertMatch(LogState, log(RCLState)). -endif. -- cgit v1.2.3 From 2b20716439dd0f540dbf78cc6eaabf1aa32f8583 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Mon, 4 Feb 2013 18:08:13 -0600 Subject: fix: replace COnfigFile with empty string if undefined --- src/rcl_state.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index ecf3115..25497f8 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -256,7 +256,7 @@ format(#state_t{log=LogState, output_dir=OutDir, lib_dirs=LibDirs, [rcl_util:indent(Indent), <<"state(">>, erlang:atom_to_list(Caller), <<"):\n">>, rcl_util:indent(Indent + 1), <<"log: ">>, rcl_log:format(LogState), <<",\n">>, - rcl_util:indent(Indent + 1), "config file: ", ConfigFile, "\n", + rcl_util:indent(Indent + 1), "config file: ", rcl_util:optional_to_string(ConfigFile), "\n", rcl_util:indent(Indent + 1), "goals: \n", [[rcl_util:indent(Indent + 2), rcl_depsolver:format_constraint(Goal), ",\n"] || Goal <- Goals], rcl_util:indent(Indent + 1), "output_dir: ", OutDir, "\n", -- cgit v1.2.3 From 26851a2e1c59124dea325e9a38cda25da463839a Mon Sep 17 00:00:00 2001 From: Eric B Merritt Date: Tue, 5 Feb 2013 16:49:41 -0800 Subject: fix config issues with undefined config --- src/rcl_state.erl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/rcl_state.erl') diff --git a/src/rcl_state.erl b/src/rcl_state.erl index ecf3115..149b5ab 100644 --- a/src/rcl_state.erl +++ b/src/rcl_state.erl @@ -65,7 +65,7 @@ action :: atom(), output_dir :: file:name(), lib_dirs=[] :: [file:name()], - config_file=[] :: file:filename(), + config_file=[] :: file:filename() | undefined, goals=[] :: [rcl_depsolver:constraint()], providers = [] :: [rcl_provider:t()], available_apps = [] :: [rcl_app_info:t()], @@ -102,7 +102,7 @@ new(PropList, Target) #state_t{log = proplists:get_value(log, PropList, rcl_log:new(error)), output_dir=proplists:get_value(output_dir, PropList, ""), lib_dirs=proplists:get_value(lib_dirs, PropList, ""), - config_file=proplists:get_value(config, PropList, ""), + config_file=proplists:get_value(config, PropList, undefined), action = Target, goals=proplists:get_value(goals, PropList, []), providers = [], @@ -143,11 +143,11 @@ lib_dirs(#state_t{lib_dirs=LibDir}) -> goals(#state_t{goals=TS}) -> TS. --spec config_file(t()) -> file:filename(). +-spec config_file(t()) -> file:filename() | undefined. config_file(#state_t{config_file=ConfigFiles}) -> ConfigFiles. --spec config_file(t(), file:filename()) -> t(). +-spec config_file(t(), file:filename() | undefined) -> t(). config_file(State, ConfigFiles) -> State#state_t{config_file=ConfigFiles}. -- cgit v1.2.3