55 lines
1.5 KiB
Erlang
55 lines
1.5 KiB
Erlang
|
%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
|
||
|
%% ex: ts=4 sw=4 et
|
||
|
-module(rebar_resource).
|
||
|
|
||
|
-export([new/3,
|
||
|
lock/2,
|
||
|
download/4,
|
||
|
needs_update/2,
|
||
|
make_vsn/2]).
|
||
|
|
||
|
-export_type([source/0,
|
||
|
type/0,
|
||
|
location/0,
|
||
|
ref/0]).
|
||
|
|
||
|
-include("rebar.hrl").
|
||
|
|
||
|
-type source() :: {type(), location(), ref()} | {type(), location(), ref(), binary()}.
|
||
|
-type type() :: atom().
|
||
|
-type location() :: string().
|
||
|
-type ref() :: any().
|
||
|
|
||
|
-callback lock(file:filename_all(), tuple()) ->
|
||
|
source().
|
||
|
-callback download(file:filename_all(), tuple(), rebar_state:t()) ->
|
||
|
{tarball, file:filename_all()} | {ok, any()} | {error, any()}.
|
||
|
-callback needs_update(file:filename_all(), tuple()) ->
|
||
|
boolean().
|
||
|
-callback make_vsn(file:filename_all()) ->
|
||
|
{plain, string()} | {error, string()}.
|
||
|
|
||
|
-spec new(type(), module(), term()) -> rebar_resource_v2:resource().
|
||
|
new(Type, Module, State) ->
|
||
|
#resource{type=Type,
|
||
|
module=Module,
|
||
|
state=State,
|
||
|
implementation=?MODULE}.
|
||
|
|
||
|
lock(Module, AppInfo) ->
|
||
|
Module:lock(rebar_app_info:dir(AppInfo), rebar_app_info:source(AppInfo)).
|
||
|
|
||
|
download(Module, TmpDir, AppInfo, State) ->
|
||
|
case Module:download(TmpDir, rebar_app_info:source(AppInfo), State) of
|
||
|
{ok, _} ->
|
||
|
ok;
|
||
|
Error ->
|
||
|
Error
|
||
|
end.
|
||
|
|
||
|
needs_update(Module, AppInfo) ->
|
||
|
Module:needs_update(rebar_app_info:dir(AppInfo), rebar_app_info:source(AppInfo)).
|
||
|
|
||
|
make_vsn(Module, AppInfo) ->
|
||
|
Module:make_vsn(rebar_app_info:dir(AppInfo)).
|