|
|
@ -209,18 +209,25 @@ apply_profiles(State, [default]) -> |
|
|
|
State; |
|
|
|
apply_profiles(State=#state_t{opts=Opts, current_profiles=CurrentProfiles}, Profiles) -> |
|
|
|
ConfigProfiles = rebar_state:get(State, profiles, []), |
|
|
|
{Profiles1, NewOpts} = |
|
|
|
lists:foldl(fun(default, {ProfilesAcc, OptsAcc}) -> |
|
|
|
{ProfilesAcc, OptsAcc}; |
|
|
|
(Profile, {ProfilesAcc, OptsAcc}) -> |
|
|
|
NewProfilesAcc = case lists:member(Profile, CurrentProfiles) of |
|
|
|
false -> [Profile]++ProfilesAcc; |
|
|
|
true -> ProfilesAcc |
|
|
|
end, |
|
|
|
NewOpts = |
|
|
|
lists:foldl(fun(default, OptsAcc) -> |
|
|
|
OptsAcc; |
|
|
|
(Profile, OptsAcc) -> |
|
|
|
ProfileOpts = dict:from_list(proplists:get_value(Profile, ConfigProfiles, [])), |
|
|
|
{NewProfilesAcc, merge_opts(Profile, ProfileOpts, OptsAcc)} |
|
|
|
end, {[], Opts}, Profiles), |
|
|
|
State#state_t{current_profiles=CurrentProfiles++Profiles1, opts=NewOpts}. |
|
|
|
merge_opts(Profile, ProfileOpts, OptsAcc) |
|
|
|
end, Opts, Profiles), |
|
|
|
State#state_t{current_profiles = deduplicate(CurrentProfiles ++ Profiles), 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), |
|
|
|