summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2016-08-27 15:56:01 -0400
committerFred Hebert <mononcqc@ferd.ca>2016-08-27 15:56:01 -0400
commit6bd8cda77aaa089f9eaa87dd696cfa63af5f2292 (patch)
treef551229d7ace0117bc70278783bfdae70bc094de
parent8ee9cc89969afd79bf8687dcdf978f1a09e01d48 (diff)
Fix crash when doing hash check with missing index
Specifically, when fetching an application where the expected hash is unknown, the hash is validated from the hex index; when the index is available, the hash is fetched fine and later inserted in the lock file. However, if the index is not available, the call would simply crash. This patch fixes thing so that instead, the index is refreshed before giving up and failing.
-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]);