Skip to content

Commit aa546d2

Browse files
authored
Merge pull request #2287 from pablocostass/2126_match_on_dep_name_in_overrides
Match on dep name in overrides
2 parents a913070 + 7983482 commit aa546d2

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

src/rebar_opts.erl

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,10 @@ add_opt(Opts1, Opts2) ->
151151
del_opt(Opts1, Opts2) ->
152152
lists:foldl(fun({deps, Value}, OptsAcc) ->
153153
OldValue = ?MODULE:get(OptsAcc, {deps,default}, []),
154-
set(OptsAcc, {deps,default}, OldValue--Value);
154+
set(OptsAcc, {deps,default}, del_dep(OldValue, Value));
155155
({Key, Value}, OptsAcc) ->
156156
OldValue = ?MODULE:get(OptsAcc, Key, []),
157-
set(OptsAcc, Key, OldValue--Value)
157+
set(OptsAcc, Key, del_dep(OldValue, Value))
158158
end, Opts2, Opts1).
159159

160160
override_opt(Opts1, Opts2) ->
@@ -164,6 +164,25 @@ override_opt(Opts1, Opts2) ->
164164
set(OptsAcc, Key, Value)
165165
end, Opts2, Opts1).
166166

167+
%% @private
168+
del_dep(OldValue, [Value]) when is_atom(Value) ->
169+
NewValue = lists:keydelete(atom_to_binary(Value, utf8), 1, OldValue),
170+
del_dep(NewValue, OldValue, [Value]);
171+
del_dep(OldValue, [{Value, _Version, _Source}]) ->
172+
NewValue = lists:keydelete(atom_to_binary(Value, utf8), 1, OldValue),
173+
del_dep(NewValue, OldValue, [{Value, _Version, _Source}]);
174+
del_dep(OldValue, [Value|Values]) ->
175+
NewValue = del_dep(del_dep(OldValue, [Value]), OldValue, [Value]),
176+
del_dep(NewValue, Values).
177+
178+
%% @private
179+
%% If the initial deletion did not work remove it as always
180+
%% to ensure rebar3 at least maintains its old behaviour.
181+
del_dep(OldValue, OldValue, Value) ->
182+
OldValue--Value;
183+
del_dep(NewValue, _OldValue, _Value) ->
184+
NewValue.
185+
167186
%%
168187
%% Function for dict:merge/3 (in merge_opts/2) to merge options by priority.
169188
%%

test/rebar_compile_SUITE.erl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ all() ->
2828
umbrella_mib_first_test, only_default_transitive_deps, clean_all,
2929
clean_specific, profile_deps, deps_build_in_prod, only_deps,
3030
override_deps, git_subdir_deps, override_add_deps, override_del_deps,
31-
override_opts, override_add_opts, override_del_opts,
31+
override_del_pkg_deps, override_opts, override_add_opts, override_del_opts,
3232
apply_overrides_exactly_once, override_only_deps,
3333
profile_override_deps, profile_override_add_deps, profile_override_del_deps,
3434
profile_override_opts, profile_override_add_opts, profile_override_del_opts,
@@ -1608,6 +1608,28 @@ override_del_deps(Config) ->
16081608
{dep, "dep_d"}]}
16091609
).
16101610

1611+
override_del_pkg_deps(Config) ->
1612+
Deps = rebar_test_utils:expand_deps(pkg, [{"some_dep", "0.0.1", [{"other_dep", "0.0.1", []}]}]),
1613+
TopDeps = rebar_test_utils:top_level_deps(Deps),
1614+
1615+
{_, PkgDeps} = rebar_test_utils:flat_deps(Deps),
1616+
mock_pkg_resource:mock([{pkgdeps, PkgDeps}]),
1617+
1618+
RebarConfig = [
1619+
{deps, TopDeps},
1620+
{overrides, [
1621+
{del, some_dep, [
1622+
{deps, [other_dep]}
1623+
]}
1624+
]}
1625+
],
1626+
1627+
rebar_test_utils:run_and_check(
1628+
Config, RebarConfig, ["compile"],
1629+
{ok, [{dep, "some_dep"},
1630+
{dep_not_exist, "other_dep"}]}
1631+
).
1632+
16111633
override_opts(Config) ->
16121634
AppsDir = ?config(apps, Config),
16131635

0 commit comments

Comments
 (0)