mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Make update-deps honor apps= and skip_apps=
Because rebar_core handles skipping apps, we had to specialcase the handling in the case of update-deps because it has to do its own dep handling. The way this was done is not particularly clean, but there currently does not exist another way for a command to signal rebar_core that it doesn't want rebar_core to pay attention to skip_apps. With this change, however, you can update-deps even with local conflicting changes/commits by simply skipping the deps you don't wish to update, or whitelisting he ones you do wish to update.
This commit is contained in:
parent
f46e7b2e5c
commit
d9aa65f118
2 changed files with 21 additions and 1 deletions
|
@ -163,6 +163,13 @@ skip_or_process_dir({_, ModuleSetFile}=ModuleSet, Config, CurrentCodePath,
|
||||||
skip_or_process_dir1(AppFile, ModuleSet, Config, CurrentCodePath,
|
skip_or_process_dir1(AppFile, ModuleSet, Config, CurrentCodePath,
|
||||||
Dir, Command, DirSet) ->
|
Dir, Command, DirSet) ->
|
||||||
case rebar_app_utils:is_skipped_app(Config, AppFile) of
|
case rebar_app_utils:is_skipped_app(Config, AppFile) of
|
||||||
|
{Config1, {true, _SkippedApp}} when Command == 'update-deps' ->
|
||||||
|
%% update-deps does its own app skipping. Unfortunately there's no
|
||||||
|
%% way to signal this to rebar_core, so we have to explicitly do it
|
||||||
|
%% here... Otherwise if you use app=, it'll skip the toplevel
|
||||||
|
%% directory and nothing will be updated.
|
||||||
|
process_dir1(Dir, Command, DirSet, Config1,
|
||||||
|
CurrentCodePath, ModuleSet);
|
||||||
{Config1, {true, SkippedApp}} ->
|
{Config1, {true, SkippedApp}} ->
|
||||||
?DEBUG("Skipping app: ~p~n", [SkippedApp]),
|
?DEBUG("Skipping app: ~p~n", [SkippedApp]),
|
||||||
Config2 = increment_operations(Config1),
|
Config2 = increment_operations(Config1),
|
||||||
|
|
|
@ -600,7 +600,10 @@ update_deps_int(Config0, UDD) ->
|
||||||
|
|
||||||
%% Update each dep
|
%% Update each dep
|
||||||
UpdatedDeps = [update_source(Config1, D)
|
UpdatedDeps = [update_source(Config1, D)
|
||||||
|| D <- Deps, D#dep.source =/= undefined, not lists:member(D, UDD)],
|
|| D <- Deps, D#dep.source =/= undefined,
|
||||||
|
not lists:member(D, UDD),
|
||||||
|
not should_skip_update_dep(Config1, D)
|
||||||
|
],
|
||||||
|
|
||||||
lists:foldl(fun(Dep, {Config, Updated}) ->
|
lists:foldl(fun(Dep, {Config, Updated}) ->
|
||||||
{true, AppDir} = get_deps_dir(Config, Dep#dep.app),
|
{true, AppDir} = get_deps_dir(Config, Dep#dep.app),
|
||||||
|
@ -629,6 +632,16 @@ update_deps_int(Config0, UDD) ->
|
||||||
end, {Config1, lists:umerge(lists:sort(UpdatedDeps),
|
end, {Config1, lists:umerge(lists:sort(UpdatedDeps),
|
||||||
lists:sort(UDD))}, UpdatedDeps).
|
lists:sort(UDD))}, UpdatedDeps).
|
||||||
|
|
||||||
|
should_skip_update_dep(Config, Dep) ->
|
||||||
|
{true, AppDir} = get_deps_dir(Config, Dep#dep.app),
|
||||||
|
{true, AppFile} = rebar_app_utils:is_app_dir(AppDir),
|
||||||
|
case rebar_app_utils:is_skipped_app(Config, AppFile) of
|
||||||
|
{_Config, {true, _SkippedApp}} ->
|
||||||
|
true;
|
||||||
|
_ ->
|
||||||
|
false
|
||||||
|
end.
|
||||||
|
|
||||||
%% Recursively walk the deps and build a list of them.
|
%% Recursively walk the deps and build a list of them.
|
||||||
collect_deps(Dir, C) ->
|
collect_deps(Dir, C) ->
|
||||||
case file:set_cwd(Dir) of
|
case file:set_cwd(Dir) of
|
||||||
|
|
Loading…
Reference in a new issue