60 lines
2.1 KiB
Erlang
60 lines
2.1 KiB
Erlang
|
%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
|
||
|
%% ex: ts=4 sw=4 et
|
||
|
|
||
|
-module(rebar_prv_update).
|
||
|
|
||
|
-behaviour(provider).
|
||
|
|
||
|
-export([init/1,
|
||
|
do/1,
|
||
|
format_error/1]).
|
||
|
|
||
|
-include("rebar.hrl").
|
||
|
-include_lib("providers/include/providers.hrl").
|
||
|
|
||
|
-define(PROVIDER, update).
|
||
|
-define(DEPS, []).
|
||
|
|
||
|
%% ===================================================================
|
||
|
%% Public API
|
||
|
%% ===================================================================
|
||
|
|
||
|
-spec init(rebar_state:t()) -> {ok, rebar_state:t()}.
|
||
|
init(State) ->
|
||
|
State1 = rebar_state:add_provider(State, providers:create([{name, ?PROVIDER},
|
||
|
{module, ?MODULE},
|
||
|
{bare, true},
|
||
|
{deps, ?DEPS},
|
||
|
{example, "rebar3 update"},
|
||
|
{short_desc, "Update package index."},
|
||
|
{desc, "Update package index."},
|
||
|
{opts, []}])),
|
||
|
{ok, State1}.
|
||
|
|
||
|
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
|
||
|
do(State) ->
|
||
|
Names = rebar_packages:get_all_names(State),
|
||
|
Resources = rebar_state:resources(State),
|
||
|
#{repos := RepoConfigs} = rebar_resource_v2:find_resource_state(pkg, Resources),
|
||
|
[[update_package(Name, RepoConfig, State)
|
||
|
|| Name <- Names]
|
||
|
|| RepoConfig <- RepoConfigs],
|
||
|
{ok, State}.
|
||
|
|
||
|
-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) ->
|
||
|
"Failed to download package index.";
|
||
|
format_error(package_index_write) ->
|
||
|
"Failed to write package index.".
|
||
|
|
||
|
|
||
|
update_package(Name, RepoConfig, State) ->
|
||
|
case rebar_packages:update_package(Name, RepoConfig, State) of
|
||
|
fail ->
|
||
|
?WARN("Failed to fetch updates for package ~ts from repo ~ts", [Name, maps:get(name, RepoConfig)]);
|
||
|
_ ->
|
||
|
ok
|
||
|
end.
|