|
@ -36,26 +36,36 @@ init(State) -> |
|
|
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. |
|
|
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. |
|
|
do(State) -> |
|
|
do(State) -> |
|
|
try |
|
|
try |
|
|
RegistryDir = rebar_packages:registry_dir(State), |
|
|
|
|
|
filelib:ensure_dir(filename:join(RegistryDir, "dummy")), |
|
|
|
|
|
HexFile = filename:join(RegistryDir, "registry"), |
|
|
|
|
|
?INFO("Updating package registry...", []), |
|
|
|
|
|
TmpDir = ec_file:insecure_mkdtemp(), |
|
|
|
|
|
TmpFile = filename:join(TmpDir, "packages.gz"), |
|
|
|
|
|
|
|
|
case rebar_packages:registry_dir(State) of |
|
|
|
|
|
{ok, RegistryDir} -> |
|
|
|
|
|
filelib:ensure_dir(filename:join(RegistryDir, "dummy")), |
|
|
|
|
|
HexFile = filename:join(RegistryDir, "registry"), |
|
|
|
|
|
?INFO("Updating package registry...", []), |
|
|
|
|
|
TmpDir = ec_file:insecure_mkdtemp(), |
|
|
|
|
|
TmpFile = filename:join(TmpDir, "packages.gz"), |
|
|
|
|
|
|
|
|
Url = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_HEX_REGISTRY), |
|
|
|
|
|
case httpc:request(get, {Url, []}, |
|
|
|
|
|
[], [{stream, TmpFile}, {sync, true}], |
|
|
|
|
|
rebar) of |
|
|
|
|
|
{ok, saved_to_file} -> |
|
|
|
|
|
{ok, Data} = file:read_file(TmpFile), |
|
|
|
|
|
Unzipped = zlib:gunzip(Data), |
|
|
|
|
|
ok = file:write_file(HexFile, Unzipped), |
|
|
|
|
|
?INFO("Writing registry to ~s", [HexFile]), |
|
|
|
|
|
hex_to_index(State), |
|
|
|
|
|
{ok, State}; |
|
|
|
|
|
_ -> |
|
|
|
|
|
?PRV_ERROR(package_index_download) |
|
|
|
|
|
|
|
|
CDN = rebar_state:get(State, rebar_packages_cdn, ?DEFAULT_CDN), |
|
|
|
|
|
case rebar_utils:url_append_path(CDN, ?REMOTE_REGISTRY_FILE) of |
|
|
|
|
|
{ok, Url} -> |
|
|
|
|
|
?DEBUG("Fetching registry from ~p", [Url]), |
|
|
|
|
|
case httpc:request(get, {Url, []}, |
|
|
|
|
|
[], [{stream, TmpFile}, {sync, true}], |
|
|
|
|
|
rebar) of |
|
|
|
|
|
{ok, saved_to_file} -> |
|
|
|
|
|
{ok, Data} = file:read_file(TmpFile), |
|
|
|
|
|
Unzipped = zlib:gunzip(Data), |
|
|
|
|
|
ok = file:write_file(HexFile, Unzipped), |
|
|
|
|
|
?INFO("Writing registry to ~s", [HexFile]), |
|
|
|
|
|
hex_to_index(State), |
|
|
|
|
|
{ok, State}; |
|
|
|
|
|
_ -> |
|
|
|
|
|
?PRV_ERROR(package_index_download) |
|
|
|
|
|
end; |
|
|
|
|
|
_ -> |
|
|
|
|
|
?PRV_ERROR({package_parse_cdn, CDN}) |
|
|
|
|
|
end; |
|
|
|
|
|
{uri_parse_error, CDN} -> |
|
|
|
|
|
?PRV_ERROR({package_parse_cdn, CDN}) |
|
|
end |
|
|
end |
|
|
catch |
|
|
catch |
|
|
_E:C -> |
|
|
_E:C -> |
|
@ -64,6 +74,8 @@ do(State) -> |
|
|
end. |
|
|
end. |
|
|
|
|
|
|
|
|
-spec format_error(any()) -> iolist(). |
|
|
-spec format_error(any()) -> iolist(). |
|
|
|
|
|
format_error({package_parse_cdn, Uri}) -> |
|
|
|
|
|
io_lib:format("Failed to parse CDN url: ~p", [Uri]); |
|
|
format_error(package_index_download) -> |
|
|
format_error(package_index_download) -> |
|
|
"Failed to download package index."; |
|
|
"Failed to download package index."; |
|
|
format_error(package_index_write) -> |
|
|
format_error(package_index_write) -> |
|
@ -75,7 +87,7 @@ is_supported(<<"rebar3">>) -> true; |
|
|
is_supported(_) -> false. |
|
|
is_supported(_) -> false. |
|
|
|
|
|
|
|
|
hex_to_index(State) -> |
|
|
hex_to_index(State) -> |
|
|
RegistryDir = rebar_packages:registry_dir(State), |
|
|
|
|
|
|
|
|
{ok, RegistryDir} = rebar_packages:registry_dir(State), |
|
|
HexFile = filename:join(RegistryDir, "registry"), |
|
|
HexFile = filename:join(RegistryDir, "registry"), |
|
|
try ets:file2tab(HexFile) of |
|
|
try ets:file2tab(HexFile) of |
|
|
{ok, Registry} -> |
|
|
{ok, Registry} -> |
|
|