summaryrefslogtreecommitdiff
path: root/src/rebar_state.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r--src/rebar_state.erl122
1 files changed, 7 insertions, 115 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index e31b01b..2a5aa01 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -35,8 +35,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]).
@@ -62,7 +60,6 @@
all_plugin_deps = [] :: [rebar_app_info:t()],
all_deps = [] :: [rebar_app_info:t()],
- overrides = [],
resources = [],
providers = []}).
@@ -97,19 +94,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 +105,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 +240,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 +268,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 +286,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,12 +302,6 @@ deps_names(State) ->
Deps = rebar_state:get(State, deps, []),
deps_names(Deps).
-overrides(#state_t{overrides=Overrides}) ->
- Overrides.
-
-overrides(State=#state_t{}, Overrides) ->
- State#state_t{overrides=Overrides}.
-
project_apps(#state_t{project_apps=Apps}) ->
Apps.