Переглянути джерело

override 'deps' now automatically overrides '{deps,default}'

pull/745/head
Tristan Sloughter 9 роки тому
джерело
коміт
f2f63013fe
2 змінених файлів з 52 додано та 5 видалено
  1. +10
    -3
      src/rebar_state.erl
  2. +42
    -2
      test/rebar_compile_SUITE.erl

+ 10
- 3
src/rebar_state.erl Переглянути файл

@ -242,7 +242,9 @@ apply_overrides(State=#state_t{overrides=Overrides}, AppName) ->
%% Inefficient. We want the order we get here though.
State1 = lists:foldl(fun({override, O}, StateAcc) ->
lists:foldl(fun({Key, Value}, StateAcc1) ->
lists:foldl(fun({deps, Value}, StateAcc1) ->
rebar_state:set(StateAcc1, {deps,default}, Value);
({Key, Value}, StateAcc1) ->
rebar_state:set(StateAcc1, Key, Value)
end, StateAcc, O);
(_, StateAcc) ->
@ -250,7 +252,9 @@ apply_overrides(State=#state_t{overrides=Overrides}, AppName) ->
end, State, Overrides),
State2 = lists:foldl(fun({override, N, O}, StateAcc) when N =:= Name ->
lists:foldl(fun({Key, Value}, StateAcc1) ->
lists:foldl(fun({deps, Value}, StateAcc1) ->
rebar_state:set(StateAcc1, {deps,default}, Value);
({Key, Value}, StateAcc1) ->
rebar_state:set(StateAcc1, Key, Value)
end, StateAcc, O);
(_, StateAcc) ->
@ -258,7 +262,10 @@ apply_overrides(State=#state_t{overrides=Overrides}, AppName) ->
end, State1, Overrides),
State3 = lists:foldl(fun({add, N, O}, StateAcc) when N =:= Name ->
lists:foldl(fun({Key, Value}, StateAcc1) ->
lists:foldl(fun({deps, Value}, StateAcc1) ->
OldValue = rebar_state:get(StateAcc1, {deps,default}, []),
rebar_state:set(StateAcc1, {deps,default}, Value++OldValue);
({Key, Value}, StateAcc1) ->
OldValue = rebar_state:get(StateAcc1, Key, []),
rebar_state:set(StateAcc1, Key, Value++OldValue)
end, StateAcc, O);

+ 42
- 2
test/rebar_compile_SUITE.erl Переглянути файл

@ -23,7 +23,9 @@
erl_first_files_test/1,
mib_test/1,
only_default_transitive_deps/1,
clean_all/1]).
clean_all/1,
override_deps/1,
profile_override_deps/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@ -52,7 +54,7 @@ all() ->
dont_recompile_yrl_or_xrl, delete_beam_if_source_deleted,
deps_in_path, checkout_priority, highest_version_of_pkg_dep,
parse_transform_test, erl_first_files_test, mib_test, only_default_transitive_deps,
clean_all].
clean_all, override_deps, profile_override_deps].
build_basic_app(Config) ->
AppDir = ?config(apps, Config),
@ -591,3 +593,41 @@ clean_all(Config) ->
Config, RConf, ["clean", "--all"],
{ok, [{app, Name, invalid}, {app, DepName, invalid}, {app, PkgName, invalid}]}
).
override_deps(Config) ->
mock_git_resource:mock([{deps, [{some_dep, "0.0.1"},{other_dep, "0.0.1"}]}]),
Deps = rebar_test_utils:expand_deps(git, [{"some_dep", "0.0.1", [{"other_dep", "0.0.1", []}]}]),
TopDeps = rebar_test_utils:top_level_deps(Deps),
RebarConfig = [
{deps, TopDeps},
{overrides, [
{override, some_dep, [
{deps, []}
]}
]}
],
rebar_test_utils:run_and_check(
Config, RebarConfig, ["compile"],
{ok, [{dep, "some_dep"},{dep_not_exist, "other_dep"}]}
).
profile_override_deps(Config) ->
mock_git_resource:mock([{deps, [{some_dep, "0.0.1"},{other_dep, "0.0.1"}]}]),
Deps = rebar_test_utils:expand_deps(git, [{"some_dep", "0.0.1", [{"other_dep", "0.0.1", []}]}]),
TopDeps = rebar_test_utils:top_level_deps(Deps),
RebarConfig = [
{deps, TopDeps},
{profiles, [{a,
[{overrides, [
{override, some_dep, [
{deps, []}
]}
]}
]}
]}],
rebar_test_utils:run_and_check(
Config, RebarConfig, ["as", "a", "compile"],
{ok, [{dep, "some_dep"},{dep_not_exist, "other_dep"}]}
).

Завантаження…
Відмінити
Зберегти