diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2015-05-04 00:24:21 +0000 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2015-05-04 00:24:21 +0000 |
commit | 5920ee29bef1462434e419ceee1342a614e6f063 (patch) | |
tree | 2b13d7544d7f76ad93bad21cd3fb4fb76120f764 /src/rebar_state.erl | |
parent | 9b770b896718aee800e43ac045582cd8abb266da (diff) | |
parent | 33736f32a9a8bfd30711270e8f1376280915d697 (diff) |
Merge branch 'app-discover-profile-duplication' of https://github.com/kovyl2404/rebar3 into kovyl2404-app-discover-profile-duplication
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r-- | src/rebar_state.erl | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl index ddac9d2..46c870e 100644 --- a/src/rebar_state.erl +++ b/src/rebar_state.erl @@ -229,16 +229,28 @@ apply_profiles(State, Profile) when not is_list(Profile) -> apply_profiles(State, [Profile]); apply_profiles(State, [default]) -> State; -apply_profiles(State=#state_t{opts=Opts, current_profiles=CurrentProfiles}, Profiles) -> +apply_profiles(State=#state_t{default = Defaults, current_profiles=CurrentProfiles}, Profiles) -> + AppliedProfiles = deduplicate(CurrentProfiles ++ Profiles), ConfigProfiles = rebar_state:get(State, profiles, []), - {Profiles1, NewOpts} = - lists:foldl(fun(default, {ProfilesAcc, OptsAcc}) -> - {ProfilesAcc, OptsAcc}; - (Profile, {ProfilesAcc, OptsAcc}) -> + NewOpts = + lists:foldl(fun(default, OptsAcc) -> + OptsAcc; + (Profile, OptsAcc) -> ProfileOpts = dict:from_list(proplists:get_value(Profile, ConfigProfiles, [])), - {[Profile]++ProfilesAcc, merge_opts(Profile, ProfileOpts, OptsAcc)} - end, {[], Opts}, Profiles), - State#state_t{current_profiles=CurrentProfiles++Profiles1, opts=NewOpts}. + merge_opts(Profile, ProfileOpts, OptsAcc) + end, Defaults, AppliedProfiles), + State#state_t{current_profiles = AppliedProfiles, opts=NewOpts}. + +deduplicate(Profiles) -> + do_deduplicate(lists:reverse(Profiles), []). + +do_deduplicate([], Acc) -> + Acc; +do_deduplicate([Head | Rest], Acc) -> + case lists:member(Head, Acc) of + true -> do_deduplicate(Rest, Acc); + false -> do_deduplicate(Rest, [Head | Acc]) + end. merge_opts(Profile, NewOpts, OldOpts) -> Opts = merge_opts(NewOpts, OldOpts), |