From 2ff4ac6d5049746be80263e48df5d864606e22d6 Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Fri, 17 Apr 2015 16:37:33 +0000 Subject: Default deps always to the default profile When fetching dependencies for the first time using a profile (`rebar3 as prod release` or `rebar3 ct`), the dependencies get fetched into the non-default profile. This has two consequences: - the files get re-downloaded on follow-up runs - the lock file includes incomplete or too many deps in its list This patch forces dependencies in the default profile to be stored in _build/default/lib even when running under other profiles, then symlinks them to the correct one. This makes it so common dependencies in 'default' be downloaded there and avoids re-downloading them. Should also fix the lock issues. --- src/rebar_prv_lock.erl | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'src/rebar_prv_lock.erl') diff --git a/src/rebar_prv_lock.erl b/src/rebar_prv_lock.erl index 5536ec9..f88b1ff 100644 --- a/src/rebar_prv_lock.erl +++ b/src/rebar_prv_lock.erl @@ -29,19 +29,10 @@ init(State) -> -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> - AllDeps = rebar_state:lock(State), - Locks = [begin - Dir = rebar_app_info:dir(Dep), - Source = rebar_app_info:source(Dep), - - %% If source is tuple it is a source dep - %% e.g. {git, "git://github.com/ninenines/cowboy.git", "master"} - {rebar_app_info:name(Dep) - ,rebar_fetch:lock_source(Dir, Source, State) - ,rebar_app_info:dep_level(Dep)} - end || Dep <- AllDeps, not(rebar_app_info:is_checkout(Dep))], + Locks = build_locks(State), Dir = rebar_state:dir(State), - file:write_file(filename:join(Dir, ?LOCK_FILE), io_lib:format("~p.~n", [Locks])), + file:write_file(filename:join(Dir, ?LOCK_FILE), + io_lib:format("~p.~n", [Locks])), {ok, State}. -spec format_error(any()) -> iolist(). @@ -50,3 +41,17 @@ format_error(Reason) -> info(_) -> "". + +build_locks(State) -> + AllDeps = rebar_state:lock(State), + [begin + Dir = rebar_app_info:dir(Dep), + Source = rebar_app_info:source(Dep), + + %% If source is tuple it is a source dep + %% e.g. {git, "git://github.com/ninenines/cowboy.git", "master"} + {rebar_app_info:name(Dep) + ,rebar_fetch:lock_source(Dir, Source, State) + ,rebar_app_info:dep_level(Dep)} + end || Dep <- AllDeps, not(rebar_app_info:is_checkout(Dep))]. + -- cgit v1.1