Parcourir la source

Avoid duplicating deps in discover phase

The deps are sorted and merged, but the merge function merges lists, not
elements. This yields deps that are duplicated and ran for multiple
times.

We first add proper sorts so the keymerge is guaranteed to be fine, and
then do a dedup run to get rid of duplicates if they happen to be.
pull/269/head
Fred Hebert il y a 10 ans
Parent
révision
bc98ea22aa
1 fichiers modifiés avec 8 ajouts et 1 suppressions
  1. +8
    -1
      src/rebar_app_discover.erl

+ 8
- 1
src/rebar_app_discover.erl Voir le fichier

@ -48,7 +48,9 @@ merge_deps(AppInfo, State) ->
State1 = lists:foldl(fun(Profile, StateAcc) ->
AppProfDeps = rebar_state:get(AppState, {deps, Profile}, []),
TopLevelProfDeps = rebar_state:get(StateAcc, {deps, Profile}, []),
ProfDeps2 = lists:keymerge(1, TopLevelProfDeps, AppProfDeps),
ProfDeps2 = dedup(lists:keymerge(1,
lists:keysort(1, TopLevelProfDeps),
lists:keysort(1, AppProfDeps))),
rebar_state:set(StateAcc, {deps, Profile}, ProfDeps2)
end, State, lists:reverse(CurrentProfiles)),
@ -166,3 +168,8 @@ create_app_info(AppDir, AppFile) ->
_ ->
error
end.
dedup([]) -> [];
dedup([A]) -> [A];
dedup([H,H|T]) -> dedup([H|T]);
dedup([H|T]) -> [H|dedup(T)].

Chargement…
Annuler
Enregistrer