瀏覽代碼

test deps support, but builds them after project apps currently

pull/3/head
Tristan Sloughter 10 年之前
父節點
當前提交
fa74056d2a
共有 5 個文件被更改,包括 71 次插入6 次删除
  1. +1
    -0
      src/rebar.app.src
  2. +4
    -1
      src/rebar_app_discover.erl
  3. +1
    -5
      src/rebar_prv_install_deps.erl
  4. +55
    -0
      src/rebar_prv_test_deps.erl
  5. +10
    -0
      src/rebar_utils.erl

+ 1
- 0
src/rebar.app.src 查看文件

@ -25,6 +25,7 @@
rebar_prv_deps,
rebar_prv_do,
rebar_prv_lock,
rebar_prv_test_deps,
rebar_prv_install_deps,
rebar_prv_packages,
rebar_erlydtl_compiler,

+ 4
- 1
src/rebar_app_discover.erl 查看文件

@ -111,7 +111,10 @@ create_app_info(AppDir, AppFile) ->
case file:consult(AppFile) of
{ok, [{application, AppName, AppDetails}]} ->
AppVsn = proplists:get_value(vsn, AppDetails),
AppDeps = proplists:get_value(applications, AppDetails, []),
%AppDeps = proplists:get_value(applications, AppDetails, []),
C = rebar_config:consult(AppDir),
S = rebar_state:new(rebar_state:new(), C, AppDir),
AppDeps = rebar_state:deps_names(S),
AbsCwd = filename:absname(rebar_utils:get_cwd()),
{ok, AppInfo} = rebar_app_info:new(AppName, AppVsn, AppDir, AppDeps),
RebarConfig = filename:join(AppDir, "rebar.config"),

+ 1
- 5
src/rebar_prv_install_deps.erl 查看文件

@ -77,7 +77,7 @@ do(State) ->
Source = ProjectApps ++ rebar_state:src_apps(State1),
case rebar_topo:sort_apps(Source) of
{ok, Sort} ->
{ok, rebar_state:set(State1, deps_to_build, lists:dropwhile(fun is_valid/1, Sort -- ProjectApps))};
{ok, rebar_state:set(State1, deps_to_build, lists:dropwhile(fun rebar_app_info:valid/1, Sort -- ProjectApps))};
{error, Error} ->
{error, Error}
end.
@ -137,10 +137,6 @@ handle_deps(State, Deps, Update) ->
%% Internal functions
%% ===================================================================
-spec is_valid(rebar_app_info:t()) -> boolean().
is_valid(App) ->
rebar_app_info:valid(App).
-spec package_to_app(file:filename_all(), rebar_dict(),
rlx_depsolver:pkg()) -> [rebar_app_info:t()].
package_to_app(DepsDir, Packages, Pkg={_, Vsn}) ->

+ 55
- 0
src/rebar_prv_test_deps.erl 查看文件

@ -0,0 +1,55 @@
-module(rebar_prv_test_deps).
-behaviour(provider).
-export([init/1,
do/1]).
-include("rebar.hrl").
-define(PROVIDER, test_deps).
-define(DEPS, [install_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, undefined},
{short_desc, "Install dependencies needed only for testing."},
{desc, ""},
{opts, []}])),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
ProjectApps = rebar_state:project_apps(State),
TestDeps = rebar_state:get(State, test_deps, []),
Names = [ec_cnv:to_binary(element(1, Dep)) || Dep <- TestDeps],
ProjectApps1 = [rebar_app_info:deps(A, Names) || A <- ProjectApps],
{ok, State1} = rebar_prv_install_deps:handle_deps(State, TestDeps),
AllDeps = rebar_state:get(State1, all_deps, []),
case rebar_topo:sort_apps(ProjectApps1++AllDeps) of
{ok, Sort} ->
ToBuild = lists:dropwhile(fun rebar_app_info:valid/1, Sort),
lists:foreach(fun(AppInfo) ->
AppDir = rebar_app_info:dir(AppInfo),
C = rebar_config:consult(AppDir),
S = rebar_state:new(State1, C, AppDir),
rebar_prv_compile:build(S, AppInfo)
end, ToBuild),
{ok, State1};
{error, Error} ->
{error, Error}
end.
%% ===================================================================
%% Internal functions
%% ===================================================================

+ 10
- 0
src/rebar_utils.erl 查看文件

@ -32,6 +32,8 @@
is_arch/1,
sh/2,
sh_send/3,
abort/0,
abort/2,
escript_foldl/3,
find_files/2,
find_files/3,
@ -408,6 +410,14 @@ beams(Dir) ->
filelib:fold_files(Dir, ".*\.beam\$", true,
fun(F, Acc) -> [F | Acc] end, []).
-spec abort() -> no_return().
abort() ->
throw(rebar_abort).
-spec abort(string(), [term()]) -> no_return().
abort(String, Args) ->
?ERROR(String, Args),
abort().
escript_foldl(Fun, Acc, File) ->
case escript:extract(File, [compile_source]) of
{ok, [_Shebang, _Comment, _EmuArgs, Body]} ->

Loading…
取消
儲存