summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViacheslav V. Kovalev <kovyl2404@gmail.com>2015-04-22 18:56:15 +0300
committerViacheslav V. Kovalev <kovyl2404@gmail.com>2015-04-22 18:56:15 +0300
commitd821757152be83d2f473d4d4e2157dba72a6d345 (patch)
treeff6e34724e27f1644d6a8378fb1190853d85fc13
parent0b682e364da25287aa45784150702013f4c4aee0 (diff)
parente255529da5c2366f1a9c4eb823d3c3d02c237eae (diff)
Merge remote-tracking branch 'my/app-discover-profile-duplication' into app-discover-profile-duplication
-rw-r--r--src/rebar_state.erl7
-rw-r--r--src/rebar_utils.erl15
-rw-r--r--test/rebar_utils_SUITE.erl16
3 files changed, 8 insertions, 30 deletions
diff --git a/src/rebar_state.erl b/src/rebar_state.erl
index f73370b..c2e479d 100644
--- a/src/rebar_state.erl
+++ b/src/rebar_state.erl
@@ -207,7 +207,8 @@ 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, []),
NewOpts =
lists:foldl(fun(default, OptsAcc) ->
@@ -215,8 +216,8 @@ apply_profiles(State=#state_t{opts=Opts, current_profiles=CurrentProfiles}, Prof
(Profile, OptsAcc) ->
ProfileOpts = dict:from_list(proplists:get_value(Profile, ConfigProfiles, [])),
merge_opts(Profile, ProfileOpts, OptsAcc)
- end, Opts, Profiles),
- State#state_t{current_profiles = deduplicate(CurrentProfiles ++ Profiles), opts=NewOpts}.
+ end, Defaults, AppliedProfiles),
+ State#state_t{current_profiles = AppliedProfiles, opts=NewOpts}.
deduplicate(Profiles) ->
do_deduplicate(lists:reverse(Profiles), []).
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index 76be9a8..004ed35 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -257,20 +257,7 @@ tup_sort(List) ->
tup_umerge([], Olds) ->
Olds;
tup_umerge([New|News], Olds) ->
- reverse_deduplicate( umerge(News, Olds, [], New) ).
-
-reverse_deduplicate(List) ->
- lists:reverse( do_deduplicate(lists:reverse(List), []) ).
-
-do_deduplicate([], Acc) ->
- Acc;
-do_deduplicate([Value | Rest], Acc) ->
- case lists:member(Value, Acc) of
- true ->
- do_deduplicate(Rest, Acc);
- false ->
- do_deduplicate(Rest, [Value | Acc])
- end.
+ lists:reverse( umerge(News, Olds, [], New) ).
%% This is equivalent to umerge2_2 in the stdlib, except we use the expanded
%% value/key only to compare
diff --git a/test/rebar_utils_SUITE.erl b/test/rebar_utils_SUITE.erl
index 98e7e58..ce26bbc 100644
--- a/test/rebar_utils_SUITE.erl
+++ b/test/rebar_utils_SUITE.erl
@@ -21,8 +21,7 @@
task_with_flag_with_trailing_comma/1,
task_with_flag_with_commas/1,
task_with_multiple_flags/1,
- special_task_do/1,
- tup_umerge_deduplication/1]).
+ special_task_do/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -30,8 +29,7 @@
all() ->
- [{group, args_to_tasks},
- tup_umerge_deduplication
+ [{group, args_to_tasks}
].
groups() ->
@@ -120,12 +118,4 @@ special_task_do(_Config) ->
[{"foo", []}, {"do", ["bar,", "baz"]}] = rebar_utils:args_to_tasks(["foo,",
"do",
"bar,",
- "baz"]).
-
-tup_umerge_deduplication(_Config) ->
- Old = [{key,c},{key,b},{key,a}],
- New = [{key, a}],
- ?assertEqual(
- [{key, a}, {key, c}, {key, b}],
- rebar_utils:tup_umerge(New, Old)
- ).
+ "baz"]). \ No newline at end of file