summaryrefslogtreecommitdiff
path: root/src/rebar_state.erl
diff options
context:
space:
mode:
authorViacheslav V. Kovalev <kovyl2404@gmail.com>2015-04-21 01:22:28 +0300
committerViacheslav V. Kovalev <kovyl2404@gmail.com>2015-04-21 09:27:12 +0300
commit381c6f4779a93b50308f2cc86de8a19b23ebcee5 (patch)
treeacf47ce67548731d353b56646f970daad2245dfc /src/rebar_state.erl
parentcb14a33fdd9eb7e4bf0cacde52c3027910de34b3 (diff)
Correctly deduplicate profiles when applying
Conflicts: src/rebar_state.erl
Diffstat (limited to 'src/rebar_state.erl')
-rw-r--r--src/rebar_state.erl29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index 7d872ee..22e5497 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -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),