瀏覽代碼

Correctly deduplicate profiles when applying

Conflicts:
	src/rebar_state.erl
pull/350/head
Viacheslav V. Kovalev 10 年之前
父節點
當前提交
381c6f4779
共有 2 個檔案被更改,包括 19 行新增12 行删除
  1. +1
    -1
      src/rebar_dir.erl
  2. +18
    -11
      src/rebar_state.erl

+ 1
- 1
src/rebar_dir.erl 查看文件

@ -29,7 +29,7 @@ base_dir(State) ->
["default"] -> ["default"];
%% drop `default` from the profile dir if it's implicit and reverse order
%% of profiles to match order passed to `as`
["default"|Rest] -> lists:reverse(Rest)
["default"|Rest] -> Rest
end,
ProfilesDir = string:join(ProfilesStrings, "+"),
filename:join(rebar_state:get(State, base_dir, ?DEFAULT_BASE_DIR), ProfilesDir).

+ 18
- 11
src/rebar_state.erl 查看文件

@ -209,18 +209,25 @@ apply_profiles(State, [default]) ->
State;
apply_profiles(State=#state_t{opts=Opts, current_profiles=CurrentProfiles}, Profiles) ->
ConfigProfiles = rebar_state:get(State, profiles, []),
{Profiles1, NewOpts} =
lists:foldl(fun(default, {ProfilesAcc, OptsAcc}) ->
{ProfilesAcc, OptsAcc};
(Profile, {ProfilesAcc, OptsAcc}) ->
NewProfilesAcc = case lists:member(Profile, CurrentProfiles) of
false -> [Profile]++ProfilesAcc;
true -> ProfilesAcc
end,
NewOpts =
lists:foldl(fun(default, OptsAcc) ->
OptsAcc;
(Profile, OptsAcc) ->
ProfileOpts = dict:from_list(proplists:get_value(Profile, ConfigProfiles, [])),
{NewProfilesAcc, merge_opts(Profile, ProfileOpts, OptsAcc)}
end, {[], Opts}, Profiles),
State#state_t{current_profiles=CurrentProfiles++Profiles1, opts=NewOpts}.
merge_opts(Profile, ProfileOpts, OptsAcc)
end, Opts, Profiles),
State#state_t{current_profiles = deduplicate(CurrentProfiles ++ Profiles), opts=NewOpts}.
deduplicate(Profiles) ->
do_deduplicate(lists:reverse(Profiles), []).
do_deduplicate([], Acc) ->
Acc;
do_deduplicate([Head | Rest], Acc) ->
case lists:member(Head, Acc) of
true -> do_deduplicate(Rest, Acc);
false -> do_deduplicate(Rest, [Head | Acc])
end.
merge_opts(Profile, NewOpts, OldOpts) ->
Opts = merge_opts(NewOpts, OldOpts),

Loading…
取消
儲存