diff options
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r-- | src/rebar_state.erl | 130 |
1 files changed, 15 insertions, 115 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl index e31b01b..176a80b 100644 --- a/src/rebar_state.erl +++ b/src/rebar_state.erl @@ -27,6 +27,7 @@ dir/1, dir/2, create_logic_providers/2, + current_app/1, current_app/2, project_apps/1, project_apps/2, deps_to_build/1, deps_to_build/2, all_plugin_deps/1, all_plugin_deps/2, update_all_plugin_deps/2, @@ -35,8 +36,6 @@ deps_names/1, - overrides/1, overrides/2, - apply_overrides/2, resources/1, resources/2, add_resource/2, providers/1, providers/2, add_provider/2]). @@ -51,18 +50,18 @@ escript_path :: undefined | file:filename_all(), lock = [], - current_profiles = [default] :: [atom()], - namespace = default :: atom(), + current_profiles = [default] :: [atom()], + namespace = default :: atom(), command_args = [], command_parsed_args = {[], []}, + current_app :: rebar_app_info:t(), project_apps = [] :: [rebar_app_info:t()], deps_to_build = [] :: [rebar_app_info:t()], all_plugin_deps = [] :: [rebar_app_info:t()], all_deps = [] :: [rebar_app_info:t()], - overrides = [], resources = [], providers = []}). @@ -97,19 +96,9 @@ new(ParentState=#state_t{}, Config) -> Dir = rebar_dir:get_cwd(), new(ParentState, Config, Dir). --spec new(t(), list(), rebar_app_info:t() | file:filename_all()) -> t(). -new(ParentState, Config, Dir) when is_list(Dir) -> - new(ParentState, Config, deps_from_config(Dir, Config), Dir); -new(ParentState, Config, AppInfo) -> - Dir = rebar_app_info:dir(AppInfo), - DepLocks = case rebar_app_info:resource_type(AppInfo) of - pkg -> - Deps = rebar_app_info:deps(AppInfo), - [{{locks, default}, Deps}, {{deps, default}, Deps}]; - _ -> - deps_from_config(Dir, Config) - end, - new(ParentState, Config, DepLocks, Dir). +-spec new(t(), list(), file:filename_all()) -> t(). +new(ParentState, Config, Dir) -> + new(ParentState, Config, deps_from_config(Dir, Config), Dir). new(ParentState, Config, Deps, Dir) -> Opts = ParentState#state_t.opts, @@ -118,7 +107,7 @@ new(ParentState, Config, Deps, Dir) -> true = rebar_config:verify_config_format(Terms), LocalOpts = dict:from_list(Terms), - NewOpts = merge_opts(LocalOpts, Opts), + NewOpts = rebar_opts:merge_opts(LocalOpts, Opts), ParentState#state_t{dir=Dir ,opts=NewOpts @@ -253,51 +242,9 @@ command_parsed_args(#state_t{command_parsed_args=CmdArgs}) -> command_parsed_args(State, CmdArgs) -> State#state_t{command_parsed_args=CmdArgs}. -apply_overrides(State=#state_t{overrides=Overrides}, AppName) -> - Name = binary_to_atom(AppName, utf8), - - %% Inefficient. We want the order we get here though. - State1 = lists:foldl(fun({override, O}, StateAcc) -> - lists:foldl(fun({deps, Value}, StateAcc1) -> - rebar_state:set(StateAcc1, {deps,default}, Value); - ({Key, Value}, StateAcc1) -> - rebar_state:set(StateAcc1, Key, Value) - end, StateAcc, O); - (_, StateAcc) -> - StateAcc - end, State, Overrides), - - State2 = lists:foldl(fun({override, N, O}, StateAcc) when N =:= Name -> - lists:foldl(fun({deps, Value}, StateAcc1) -> - rebar_state:set(StateAcc1, {deps,default}, Value); - ({Key, Value}, StateAcc1) -> - rebar_state:set(StateAcc1, Key, Value) - end, StateAcc, O); - (_, StateAcc) -> - StateAcc - end, State1, Overrides), - - State3 = lists:foldl(fun({add, N, O}, StateAcc) when N =:= Name -> - lists:foldl(fun({deps, Value}, StateAcc1) -> - OldValue = rebar_state:get(StateAcc1, {deps,default}, []), - rebar_state:set(StateAcc1, {deps,default}, Value++OldValue); - ({Key, Value}, StateAcc1) -> - OldValue = rebar_state:get(StateAcc1, Key, []), - rebar_state:set(StateAcc1, Key, Value++OldValue) - end, StateAcc, O); - (_, StateAcc) -> - StateAcc - end, State2, Overrides), - - Opts = opts(State3), - State3#state_t{default=Opts}. - add_to_profile(State, Profile, KVs) when is_atom(Profile), is_list(KVs) -> - Profiles = rebar_state:get(State, profiles, []), - ProfileOpts = dict:from_list(proplists:get_value(Profile, Profiles, [])), - NewOpts = merge_opts(Profile, dict:from_list(KVs), ProfileOpts), - NewProfiles = [{Profile, dict:to_list(NewOpts)}|lists:keydelete(Profile, 1, Profiles)], - rebar_state:set(State, profiles, NewProfiles). + Opts = rebar_opts:add_to_profile(opts(State), Profile, KVs), + State#state_t{opts=Opts}. apply_profiles(State, Profile) when not is_list(Profile) -> apply_profiles(State, [Profile]); @@ -323,7 +270,7 @@ apply_profiles(State=#state_t{default = Defaults, current_profiles=CurrentProfil case proplists:get_value(Profile, ConfigProfiles, []) of OptsList when is_list(OptsList) -> ProfileOpts = dict:from_list(OptsList), - merge_opts(Profile, ProfileOpts, OptsAcc); + rebar_opts:merge_opts(Profile, ProfileOpts, OptsAcc); Other -> throw(?PRV_ERROR({profile_not_list, Profile, Other})) end @@ -341,53 +288,6 @@ do_deduplicate([Head | Rest], Acc) -> false -> do_deduplicate(Rest, [Head | Acc]) end. -merge_opts(Profile, NewOpts, OldOpts) -> - Opts = merge_opts(NewOpts, OldOpts), - - Opts2 = case dict:find(plugins, NewOpts) of - {ok, Value} -> - dict:store({plugins, Profile}, Value, Opts); - error -> - Opts - end, - - case dict:find(deps, NewOpts) of - {ok, Value2} -> - dict:store({deps, Profile}, Value2, Opts2); - error -> - Opts2 - end. - -merge_opts(NewOpts, OldOpts) -> - dict:merge(fun(deps, _NewValue, OldValue) -> - OldValue; - ({deps, _}, NewValue, _OldValue) -> - NewValue; - (plugins, NewValue, _OldValue) -> - NewValue; - ({plugins, _}, NewValue, _OldValue) -> - NewValue; - (profiles, NewValue, OldValue) -> - dict:to_list(merge_opts(dict:from_list(NewValue), dict:from_list(OldValue))); - (_Key, NewValue, OldValue) when is_list(NewValue) -> - case io_lib:printable_list(NewValue) of - true when NewValue =:= [] -> - case io_lib:printable_list(OldValue) of - true -> - NewValue; - false -> - OldValue - end; - true -> - NewValue; - false -> - rebar_utils:tup_umerge(rebar_utils:tup_sort(NewValue) - ,rebar_utils:tup_sort(OldValue)) - end; - (_Key, NewValue, _OldValue) -> - NewValue - end, NewOpts, OldOpts). - dir(#state_t{dir=Dir}) -> Dir. @@ -404,11 +304,11 @@ deps_names(State) -> Deps = rebar_state:get(State, deps, []), deps_names(Deps). -overrides(#state_t{overrides=Overrides}) -> - Overrides. +current_app(#state_t{current_app=CurrentApp}) -> + CurrentApp. -overrides(State=#state_t{}, Overrides) -> - State#state_t{overrides=Overrides}. +current_app(State=#state_t{}, CurrentApp) -> + State#state_t{current_app=CurrentApp}. project_apps(#state_t{project_apps=Apps}) -> Apps. |