Przeglądaj źródła

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 10 lat temu
rodzic
commit
bc98ea22aa
1 zmienionych plików z 8 dodań i 1 usunięć
  1. +8
    -1
      src/rebar_app_discover.erl

+ 8
- 1
src/rebar_app_discover.erl Wyświetl plik

@ -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)].

Ładowanie…
Anuluj
Zapisz