summaryrefslogtreecommitdiff
path: root/src/rebar_utils.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_utils.erl')
-rw-r--r--src/rebar_utils.erl34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/rebar_utils.erl b/src/rebar_utils.erl
index 9f66181..7260f6d 100644
--- a/src/rebar_utils.erl
+++ b/src/rebar_utils.erl
@@ -269,20 +269,23 @@ deps_to_binary([{Name, Source} | T]) ->
deps_to_binary([Name | T]) ->
[ec_cnv:to_binary(Name) | deps_to_binary(T)].
-tup_dedup([]) ->
+tup_dedup(List) ->
+ tup_dedup_(tup_sort(List)).
+
+tup_dedup_([]) ->
[];
-tup_dedup([A]) ->
+tup_dedup_([A]) ->
[A];
-tup_dedup([A,B|T]) when element(1, A) =:= element(1, B) ->
- tup_dedup([A | T]);
-tup_dedup([A,B|T]) when element(1, A) =:= B ->
- tup_dedup([A | T]);
-tup_dedup([A,B|T]) when A =:= element(1, B) ->
- tup_dedup([A | T]);
-tup_dedup([A,A|T]) ->
- [A|tup_dedup(T)];
-tup_dedup([A|T]) ->
- [A|tup_dedup(T)].
+tup_dedup_([A,B|T]) when element(1, A) =:= element(1, B) ->
+ tup_dedup_([A | T]);
+tup_dedup_([A,B|T]) when element(1, A) =:= B ->
+ tup_dedup_([A | T]);
+tup_dedup_([A,B|T]) when A =:= element(1, B) ->
+ tup_dedup_([A | T]);
+tup_dedup_([A,A|T]) ->
+ [A|tup_dedup_(T)];
+tup_dedup_([A|T]) ->
+ [A|tup_dedup_(T)].
%% Sort the list in proplist-order, meaning that `{a,b}' and `{a,c}'
%% both compare as usual, and `a' and `b' do the same, but `a' and `{a,b}' will
@@ -311,9 +314,12 @@ tup_sort(List) ->
%%
%% This lets us apply proper overrides to list of elements according to profile
%% priority. This function depends on a stable proplist sort.
-tup_umerge([], Olds) ->
+tup_umerge(NewList, OldList) ->
+ tup_umerge_(tup_sort(NewList), tup_sort(OldList)).
+
+tup_umerge_([], Olds) ->
Olds;
-tup_umerge([New|News], Olds) ->
+tup_umerge_([New|News], Olds) ->
lists:reverse(umerge(News, Olds, [], New)).
tup_find(_Elem, []) ->