diff options
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r-- | src/rebar_state.erl | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl index 657c7d2..d5d19f3 100644 --- a/src/rebar_state.erl +++ b/src/rebar_state.erl @@ -27,6 +27,9 @@ deps_names/1, + overrides/1, overrides/2, + apply_overrides/2, + prepend_hook/3, append_hook/3, hooks/2, providers/1, providers/2, add_provider/2]). @@ -49,6 +52,7 @@ deps_to_build = [] :: [rebar_app_into:t()], all_deps = [] :: [rebar_app_into:t()], + overrides = [], providers = []}). -export_type([t/0]). @@ -150,6 +154,35 @@ 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({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({Key, Value}, StateAcc1) -> + rebar_state:set(StateAcc1, Key, Value) + end, StateAcc, O); + (_, StateAcc) -> + StateAcc + end, State1, Overrides), + + lists:foldl(fun({add, N, O}, StateAcc) when N =:= Name -> + lists:foldl(fun({Key, Value}, StateAcc1) -> + OldValue = rebar_state:get(StateAcc1, Key, []), + rebar_state:set(StateAcc1, Key, Value++OldValue) + end, StateAcc, O); + (_, StateAcc) -> + StateAcc + end, State2, Overrides). + apply_profiles(State, Profile) when not is_list(Profile) -> apply_profiles(State, [Profile]); apply_profiles(State, [default]) -> @@ -200,6 +233,12 @@ 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. |