소스 검색

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 년 전
부모
커밋
bc98ea22aa
1개의 변경된 파일8개의 추가작업 그리고 1개의 파일을 삭제
  1. +8
    -1
      src/rebar_app_discover.erl

+ 8
- 1
src/rebar_app_discover.erl 파일 보기

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

불러오는 중...
취소
저장