summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_app_utils.erl11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/rebar_app_utils.erl b/src/rebar_app_utils.erl
index 50c6314..847b0a5 100644
--- a/src/rebar_app_utils.erl
+++ b/src/rebar_app_utils.erl
@@ -190,7 +190,7 @@ update_source(AppInfo, {pkg, PkgName, PkgVsn, Hash}, State) ->
%% store the expected hash for the dependency
Hash1 = case Hash of
undefined -> % unknown, define the hash since we know the dep
- rebar_packages:registry_checksum({pkg, PkgName1, PkgVsn1, Hash}, State);
+ fetch_checksum(PkgName1, PkgVsn1, Hash, State);
_ -> % keep as is
Hash
end,
@@ -203,6 +203,15 @@ update_source(AppInfo, {pkg, PkgName, PkgVsn, Hash}, State) ->
update_source(AppInfo, Source, _State) ->
rebar_app_info:source(AppInfo, Source).
+fetch_checksum(PkgName, PkgVsn, Hash, State) ->
+ try
+ rebar_packages:registry_checksum({pkg, PkgName, PkgVsn, Hash}, State)
+ catch
+ _:_ ->
+ ?INFO("Package ~s-~s not found. Fetching registry updates and trying again...", [PkgName, PkgVsn]),
+ {ok, _} = rebar_prv_update:do(State),
+ rebar_packages:registry_checksum({pkg, PkgName, PkgVsn, Hash}, State)
+ end.
format_error({missing_package, Package}) ->
io_lib:format("Package not found in registry: ~s", [Package]);