summaryrefslogtreecommitdiff
path: root/src/rebar_deps.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_deps.erl')
-rw-r--r--src/rebar_deps.erl70
1 files changed, 6 insertions, 64 deletions
diff --git a/src/rebar_deps.erl b/src/rebar_deps.erl
index e52ed91..bb7f33f 100644
--- a/src/rebar_deps.erl
+++ b/src/rebar_deps.erl
@@ -79,12 +79,13 @@ update_deps(Config, Deps) ->
DepsDir = get_deps_dir(Config),
%% Find available apps to fulfill dependencies
+ UnbuiltApps = rebar_app_discover:find_unbuilt_apps([DepsDir]),
FoundApps = rebar_app_discover:find_apps([DepsDir]),
%% Resolve deps and their dependencies
- Deps1 = handle_deps(Deps, FoundApps),
+ Deps1 = handle_deps(Deps, UnbuiltApps++FoundApps),
- case download_missing_deps(Config, DepsDir, FoundApps, Deps1) of
+ case download_missing_deps(Config, DepsDir, FoundApps, UnbuiltApps, Deps1) of
{Config1, []} ->
{Config1, Deps1};
{Config1, _} ->
@@ -106,12 +107,11 @@ handle_deps(Deps, Found) ->
element(1, A) =:= element(1, B)
end, lists:usort(Deps), lists:usort(NewDeps1)).
-download_missing_deps(Config, DepsDir, Found, Deps) ->
- Apps = rebar_state:apps_to_build(Config),
+download_missing_deps(Config, DepsDir, Found, Unbuilt, Deps) ->
Missing = lists:filter(fun(X) ->
not lists:any(fun(F) ->
element(1, X) =:= element(2, F)
- end, Found++Apps)
+ end, Found++Unbuilt)
end, Deps),
ec_plists:foreach(fun(X) ->
TargetDir = get_deps_dir(DepsDir, element(1, X)),
@@ -125,7 +125,7 @@ download_missing_deps(Config, DepsDir, Found, Deps) ->
Config1 = lists:foldl(fun(X, ConfigAcc) ->
TargetDir = get_deps_dir(DepsDir, element(1, X)),
- [AppSrc] = rebar_app_discover:find_apps([TargetDir]),
+ [AppSrc] = rebar_app_discover:find_unbuilt_apps([TargetDir]),
rebar_state:add_app(ConfigAcc, AppSrc)
end, Config, Missing),
@@ -161,64 +161,6 @@ get_deps_dir(DepsDir, App) ->
%% Internal functions
%% ===================================================================
-
--spec gather_application_info(file:name(), file:filename()) ->
- {ok, rebar_app_info:t()} |
- {warning, Reason::term()} |
- {error, Reason::term()}.
-gather_application_info(EbinDir, File) ->
- AppDir = filename:dirname(EbinDir),
- case file:consult(File) of
- {ok, [{application, AppName, AppDetail}]} ->
- validate_application_info(EbinDir, File, AppName, AppDetail);
- {error, Reason} ->
- {warning, {unable_to_load_app, AppDir, Reason}};
- _ ->
- {warning, {invalid_app_file, File}}
- end.
-
--spec validate_application_info(file:name(),
- file:name(),
- atom(),
- proplists:proplist()) ->
- {ok, list()} |
- {warning, Reason::term()} |
- {error, Reason::term()}.
-validate_application_info(EbinDir, AppFile, AppName, AppDetail) ->
- AppDir = filename:dirname(EbinDir),
- case get_modules_list(AppFile, AppDetail) of
- {ok, List} ->
- has_all_beams(EbinDir, List);
- Error ->
- Error
- end.
-
--spec get_modules_list(file:name(), proplists:proplist()) ->
- {ok, list()} |
- {warning, Reason::term()} |
- {error, Reason::term()}.
-get_modules_list(AppFile, AppDetail) ->
- case proplists:get_value(modules, AppDetail) of
- undefined ->
- {warning, {invalid_app_file, AppFile}};
- ModulesList ->
- {ok, ModulesList}
- end.
-
--spec has_all_beams(file:name(), list()) ->
- ok | {error, Reason::term()}.
-has_all_beams(EbinDir, [Module | ModuleList]) ->
- BeamFile = filename:join([EbinDir,
- list_to_binary(atom_to_list(Module) ++ ".beam")]),
- case filelib:is_file(BeamFile) of
- true ->
- has_all_beams(EbinDir, ModuleList);
- false ->
- {warning, {missing_beam_file, Module, BeamFile}}
- end;
-has_all_beams(_, []) ->
- ok.
-
info(help, 'deps') ->
info_help("Display dependencies").