diff options
-rw-r--r-- | src/rlx_app_discovery.erl | 2 | ||||
-rw-r--r-- | src/rlx_cmd_args.erl | 7 | ||||
-rw-r--r-- | src/rlx_depsolver.erl | 1 | ||||
-rw-r--r-- | src/rlx_dscv_util.erl | 4 | ||||
-rw-r--r-- | src/rlx_log.erl | 76 | ||||
-rw-r--r-- | src/rlx_rel_discovery.erl | 2 | ||||
-rw-r--r-- | src/rlx_state.erl | 15 |
7 files changed, 60 insertions, 47 deletions
diff --git a/src/rlx_app_discovery.erl b/src/rlx_app_discovery.erl index 6407124..d321638 100644 --- a/src/rlx_app_discovery.erl +++ b/src/rlx_app_discovery.erl @@ -35,7 +35,7 @@ %% @doc recursively dig down into the library directories specified in the state %% looking for OTP Applications --spec do(rlx_state:t(), [filename:name()]) -> {ok, [rlx_app_info:t()]} | relx:error(). +-spec do(rlx_state:t(), [file:name()]) -> {ok, [rlx_app_info:t()]} | relx:error(). do(State, LibDirs) -> rlx_log:info(rlx_state:log(State), fun() -> diff --git a/src/rlx_cmd_args.erl b/src/rlx_cmd_args.erl index 4fbadba..d144953 100644 --- a/src/rlx_cmd_args.erl +++ b/src/rlx_cmd_args.erl @@ -100,7 +100,8 @@ handle_config(Opts, Targets, CommandLineConfig) -> convert_targets(Targets) -> convert_targets(Targets, []). --spec convert_targets([string()], [string()]) -> {ok, release | relup} | relx:error(). +-spec convert_targets([string()], [rlx_state:action()]) -> + {ok, [rlx_state:action()]} | relx:error(). convert_targets([], []) -> {ok, [release]}; convert_targets([], Acc) -> @@ -134,7 +135,7 @@ create_log(Opts, Acc) -> LogLevel = proplists:get_value(log_level, Opts, 0), if LogLevel >= 0, LogLevel =< 2 -> - create_goals(Opts, [{log, rlx_log:new(LogLevel)} | Acc]); + create_goals(Opts, [{log, rlx_log:new(LogLevel, command_line)} | Acc]); true -> ?RLX_ERROR({invalid_log_level, LogLevel}) end. @@ -245,7 +246,7 @@ create_disable_default_libs(Opts, Acc) -> Def = proplists:get_value(disable_default_libs, Opts, false), create_upfrom(Opts, [{disable_default_libs, Def} | Acc]). --spec create_upfrom([getopt:option()], rcl:cmd_args()) -> +-spec create_upfrom([getopt:option()], rlx_state:cmd_args()) -> {ok, rlx_state:cmd_args()} | relx:error(). create_upfrom(Opts, Acc) -> case proplists:get_value(upfrom, Opts, undefined) of diff --git a/src/rlx_depsolver.erl b/src/rlx_depsolver.erl index 2b6e420..20423d0 100644 --- a/src/rlx_depsolver.erl +++ b/src/rlx_depsolver.erl @@ -100,6 +100,7 @@ -export_type([t/0, pkg/0, constraint_op/0, + raw_constraint/0, pkg_name/0, vsn/0, constraint/0, diff --git a/src/rlx_dscv_util.erl b/src/rlx_dscv_util.erl index 3d90b08..779534c 100644 --- a/src/rlx_dscv_util.erl +++ b/src/rlx_dscv_util.erl @@ -33,7 +33,7 @@ %% Types %%============================================================================ --type process_fun(Result) :: fun((filename:name(), file | directory) -> +-type process_fun(Result) :: fun((file:name(), file | directory) -> {ok, Result} | {error, term()} | {ok, Result, Recurse::boolean()} | @@ -46,7 +46,7 @@ %% @doc recursively dig down into the library directories specified in the state %% looking for OTP Applications --spec do(process_fun([term()] | term()), [filename:name()]) -> +-spec do(process_fun([term()] | term()), [file:name()]) -> [term() | {error, term()}]. do(ProcessDir, LibDirs) -> lists:flatten(ec_plists:map(fun(LibDir) -> diff --git a/src/rlx_log.erl b/src/rlx_log.erl index 6122e9b..608c0af 100644 --- a/src/rlx_log.erl +++ b/src/rlx_log.erl @@ -23,6 +23,7 @@ -module(rlx_log). -export([new/1, + new/2, log/4, should/2, debug/2, @@ -35,14 +36,27 @@ atom_log_level/1, format/1]). --export_type([int_log_level/0, +-export_type([t/0, + int_log_level/0, atom_log_level/0, log_level/0, - log_fun/0, - t/0]). + log_fun/0]). -include_lib("relx/include/relx.hrl"). +-define(RED, 31). +-define(GREEN, 32). +-define(YELLOW, 33). +-define(BLUE, 34). +-define(MAGENTA, 35). +-define(CYAN, 36). + +-define(PREFIX, "===> "). + +-record(state_t, {mod=?MODULE :: rlx_log, + log_level=0 :: int_log_level(), + caller=api :: api | command_line}). + %%============================================================================ %% types %%============================================================================ @@ -55,29 +69,23 @@ %% and warn -type atom_log_level() :: error | info | debug. --opaque t() :: {?MODULE, int_log_level()}. - -type log_fun() :: fun(() -> iolist()). -type color() :: 31..36. --define(RED, 31). --define(GREEN, 32). --define(YELLOW, 33). --define(BLUE, 34). --define(MAGENTA, 35). --define(CYAN, 36). - --define(PREFIX, "===> "). +-opaque t() :: record(state_t). %%============================================================================ %% API %%============================================================================ %% @doc Create a new 'log level' for the system -spec new(log_level()) -> t(). -new(LogLevel) when LogLevel >= 0, LogLevel =< 2 -> - {?MODULE, LogLevel}; -new(AtomLogLevel) +new(LogLevel) -> + new(LogLevel, api). + +new(LogLevel, Caller) when LogLevel >= 0, LogLevel =< 2 -> + #state_t{mod=?MODULE, log_level=LogLevel, caller=Caller}; +new(AtomLogLevel, Caller) when AtomLogLevel =:= error; AtomLogLevel =:= info; AtomLogLevel =:= debug -> @@ -86,7 +94,7 @@ new(AtomLogLevel) info -> 1; debug -> 2 end, - new(LogLevel). + new(LogLevel, Caller). %% @doc log at the debug level given the current log state with a string or @@ -94,7 +102,7 @@ new(AtomLogLevel) -spec debug(t(), string() | log_fun()) -> ok. debug(LogState, Fun) when erlang:is_function(Fun) -> - log(LogState, ?RLX_DEBUG, fun() -> colorize(?CYAN, false, Fun()) end); + log(LogState, ?RLX_DEBUG, fun() -> colorize(LogState, ?CYAN, false, Fun()) end); debug(LogState, String) -> debug(LogState, "~s~n", [String]). @@ -102,14 +110,14 @@ debug(LogState, String) -> %% and argements @see io:format/2 -spec debug(t(), string(), [any()]) -> ok. debug(LogState, FormatString, Args) -> - log(LogState, ?RLX_DEBUG, colorize(?CYAN, false, FormatString), Args). + log(LogState, ?RLX_DEBUG, colorize(LogState, ?CYAN, false, FormatString), Args). %% @doc log at the info level given the current log state with a string or %% function that returns a string -spec info(t(), string() | log_fun()) -> ok. info(LogState, Fun) when erlang:is_function(Fun) -> - log(LogState, ?RLX_INFO, fun() -> colorize(?GREEN, false, Fun()) end); + log(LogState, ?RLX_INFO, fun() -> colorize(LogState, ?GREEN, false, Fun()) end); info(LogState, String) -> info(LogState, "~s~n", [String]). @@ -117,14 +125,14 @@ info(LogState, String) -> %% and argements @see io:format/2 -spec info(t(), string(), [any()]) -> ok. info(LogState, FormatString, Args) -> - log(LogState, ?RLX_INFO, colorize(?GREEN, false, FormatString), Args). + log(LogState, ?RLX_INFO, colorize(LogState, ?GREEN, false, FormatString), Args). %% @doc log at the error level given the current log state with a string or %% format string that returns a function -spec error(t(), string() | log_fun()) -> ok. error(LogState, Fun) when erlang:is_function(Fun) -> - log(LogState, ?RLX_ERROR, fun() -> colorize(?RED, false, Fun()) end); + log(LogState, ?RLX_ERROR, fun() -> colorize(LogState, ?RED, false, Fun()) end); error(LogState, String) -> error(LogState, "~s~n", [String]). @@ -132,11 +140,11 @@ error(LogState, String) -> %% and argements @see io:format/2 -spec error(t(), string(), [any()]) -> ok. error(LogState, FormatString, Args) -> - log(LogState, ?RLX_ERROR, colorize(?GREEN, false, FormatString), Args). + log(LogState, ?RLX_ERROR, colorize(LogState, ?GREEN, false, FormatString), Args). %% @doc Execute the fun passed in if log level is as expected. -spec log(t(), int_log_level(), log_fun()) -> ok. -log({?MODULE, DetailLogLevel}, LogLevel, Fun) +log(#state_t{mod=?MODULE, log_level=DetailLogLevel}, LogLevel, Fun) when DetailLogLevel >= LogLevel -> io:format("~s~n", [Fun()]); log(_, _, _) -> @@ -145,7 +153,7 @@ log(_, _, _) -> %% @doc when the module log level is less then or equal to the log level for the %% call then write the log info out. When its not then ignore the call. -spec log(t(), int_log_level(), string(), [any()]) -> ok. -log({?MODULE, DetailLogLevel}, LogLevel, FormatString, Args) +log(#state_t{mod=?MODULE, log_level=DetailLogLevel}, LogLevel, FormatString, Args) when DetailLogLevel >= LogLevel, erlang:is_list(Args) -> io:format(FormatString, Args); @@ -155,7 +163,7 @@ log(_, _, _, _) -> %% @doc return a boolean indicating if the system should log for the specified %% levelg -spec should(t(), int_log_level() | any()) -> boolean(). -should({?MODULE, DetailLogLevel}, LogLevel) +should(#state_t{mod=?MODULE, log_level=DetailLogLevel}, LogLevel) when DetailLogLevel >= LogLevel -> true; should(_, _) -> @@ -163,16 +171,16 @@ should(_, _) -> %% @doc get the current log level as an integer -spec log_level(t()) -> int_log_level(). -log_level({?MODULE, DetailLogLevel}) -> +log_level(#state_t{mod=?MODULE, log_level=DetailLogLevel}) -> DetailLogLevel. %% @doc get the current log level as an atom -spec atom_log_level(t()) -> atom_log_level(). -atom_log_level({?MODULE, ?RLX_ERROR}) -> +atom_log_level(#state_t{mod=?MODULE, log_level=?RLX_ERROR}) -> error; -atom_log_level({?MODULE, ?RLX_INFO}) -> +atom_log_level(#state_t{mod=?MODULE, log_level=?RLX_INFO}) -> info; -atom_log_level({?MODULE, ?RLX_DEBUG}) -> +atom_log_level(#state_t{mod=?MODULE, log_level=?RLX_DEBUG}) -> debug. -spec format(t()) -> iolist(). @@ -182,11 +190,11 @@ format(Log) -> erlang:atom_to_list(atom_log_level(Log)), <<")">>]. --spec colorize(color(), boolean(), string()) -> string(). -colorize(Color, false, Msg) when is_integer(Color) -> +-spec colorize(t(), color(), boolean(), string()) -> string(). +colorize(#state_t{caller=command_line}, Color, false, Msg) when is_integer(Color) -> colorize_(Color, 0, Msg); -colorize(Color, true, Msg) when is_integer(Color) -> - colorize_(Color, 1, Msg). +colorize(_LogState, _Color, _Bold, Msg) -> + Msg. -spec colorize_(color(), integer(), string()) -> string(). colorize_(Color, Bold, Msg) when is_integer(Color), is_integer(Bold)-> diff --git a/src/rlx_rel_discovery.erl b/src/rlx_rel_discovery.erl index 6f23ad0..1616f52 100644 --- a/src/rlx_rel_discovery.erl +++ b/src/rlx_rel_discovery.erl @@ -35,7 +35,7 @@ %% @doc recursively dig down into the library directories specified in the state %% looking for OTP Applications --spec do(rlx_state:t(), [filename:name()], [rlx_app_info:t()]) -> +-spec do(rlx_state:t(), [file:name()], [rlx_app_info:t()]) -> {ok, [rlx_release:t()]} | relx:error(). do(State, LibDirs, AppMeta) -> rlx_log:info(rlx_state:log(State), diff --git a/src/rlx_state.erl b/src/rlx_state.erl index 81f6bef..6d3c4ee 100644 --- a/src/rlx_state.erl +++ b/src/rlx_state.erl @@ -66,13 +66,14 @@ -export_type([t/0, - releases/0, - cmd_args/0]). + releases/0, + cmd_args/0, + action/0]). -record(state_t, {log :: rlx_log:t(), root_dir :: file:name(), caller :: caller(), - actions=[] :: [atom()], + actions=[] :: [action()], output_dir :: file:name(), lib_dirs=[] :: [file:name()], config_file=[] :: file:filename() | undefined, @@ -99,6 +100,7 @@ rlx_release:t()). -type cmd_args() :: proplists:proplist(). -type caller() :: command_line | api. +-type action() :: release | relup | tar. -opaque t() :: record(state_t). @@ -113,13 +115,14 @@ new(PropList, Targets) when erlang:is_list(PropList), erlang:is_list(Targets) -> {ok, Root} = file:get_cwd(), + Caller = proplists:get_value(caller, PropList, api), State0 = - #state_t{log = proplists:get_value(log, PropList, rlx_log:new(error)), + #state_t{log = proplists:get_value(log, PropList, rlx_log:new(error, Caller)), output_dir=proplists:get_value(output_dir, PropList, ""), lib_dirs=[to_binary(Dir) || Dir <- proplists:get_value(lib_dirs, PropList, [])], config_file=proplists:get_value(config, PropList, undefined), actions = Targets, - caller = proplists:get_value(caller, PropList, api), + caller = Caller, goals=proplists:get_value(goals, PropList, []), providers = [], configured_releases=ec_dictionary:new(ec_dict), @@ -135,7 +138,7 @@ new(PropList, Targets) proplists:get_value(disable_default_libs, PropList, false)). %% @doc the actions targeted for this system --spec actions(t()) -> atom(). +-spec actions(t()) -> [action()]. actions(#state_t{actions=Actions}) -> Actions. |