mirror of
https://github.com/correl/rebar.git
synced 2024-11-23 19:19:54 +00:00
77a0eb6fe4
Always-on recursive application of all rebar commands causes too many issues. Recursive application is required for: 1. dealing with dependencies: get-deps, update-deps, and compile of deps right after get-deps or update-deps 2. projects with a riak-like apps/ project structure and dev process The vast majority of projects are not structured like riak. Therefore, moving forward it's best to (by default) restrict recursive behavior to dealing with deps. This commit does that and also adds command line and rebar.config options for controlling or configuring recursion. Also, we introduce two meta commands: prepare-deps (equivalent to rebar -r get-deps compile) and refresh-deps (equivalent to rebar -r update-deps compile). riak-like projects can extend the list of recursive commands (to include 'eunit' and 'compile') by adding {recursive_cmds, [eunit, compile]} to rebar.config.
60 lines
1.7 KiB
Erlang
60 lines
1.7 KiB
Erlang
-module(tdeps1_rt).
|
|
|
|
-compile(export_all).
|
|
|
|
%% Exercise transitive dependencies
|
|
%% A -> B -> C, where A includes a .hrl from B which includes .hrl from C
|
|
|
|
files() ->
|
|
[
|
|
%% A application
|
|
{create, "ebin/a.app", app(a, [a])},
|
|
{copy, "a.rebar.config", "rebar.config"},
|
|
{copy, "a.erl", "src/a.erl"},
|
|
{copy, "../../rebar", "rebar"},
|
|
|
|
%% B application
|
|
{create, "repo/b/ebin/b.app", app(b, [])},
|
|
{copy, "b.rebar.config", "repo/b/rebar.config"},
|
|
{copy, "b.hrl", "repo/b/include/b.hrl"},
|
|
|
|
%% C application
|
|
{create, "repo/c/ebin/c.app", app(c, [])},
|
|
{copy, "c.hrl", "repo/c/include/c.hrl"}
|
|
].
|
|
|
|
apply_cmds([], _Params) ->
|
|
ok;
|
|
apply_cmds([Cmd | Rest], Params) ->
|
|
io:format("Running: ~s (~p)\n", [Cmd, Params]),
|
|
{ok, _} = retest_sh:run(Cmd, Params),
|
|
apply_cmds(Rest, Params).
|
|
|
|
run(_Dir) ->
|
|
%% Initialize the b/c apps as git repos so that dependencies pull
|
|
%% properly
|
|
GitCmds = ["git init",
|
|
"git add -A",
|
|
"git config user.email 'tdeps@example.com'",
|
|
"git config user.name 'tdeps'",
|
|
"git commit -a -m 'Initial Commit'"],
|
|
apply_cmds(GitCmds, [{dir, "repo/b"}]),
|
|
apply_cmds(GitCmds, [{dir, "repo/c"}]),
|
|
|
|
{ok, _} = retest_sh:run("./rebar get-deps", []),
|
|
{ok, _} = retest_sh:run("./rebar -r compile", []),
|
|
|
|
true = filelib:is_regular("ebin/a.beam"),
|
|
ok.
|
|
|
|
%%
|
|
%% Generate the contents of a simple .app file
|
|
%%
|
|
app(Name, Modules) ->
|
|
App = {application, Name,
|
|
[{description, atom_to_list(Name)},
|
|
{vsn, "1"},
|
|
{modules, Modules},
|
|
{registered, []},
|
|
{applications, [kernel, stdlib]}]},
|
|
io_lib:format("~p.\n", [App]).
|