diff options
author | Tristan Sloughter <t@crashfast.com> | 2014-10-13 16:23:50 -0500 |
---|---|---|
committer | Tristan Sloughter <t@crashfast.com> | 2014-10-13 16:23:50 -0500 |
commit | f1a0249bcf12f08b7aae21aec373fec4cd583dbe (patch) | |
tree | 4075fba2bb68dbebce923abaf971cb9f17250b2f /src | |
parent | 99bdc8786b363648eb9cfdb293a1692e3ad79894 (diff) |
preliminary _checkouts/ support
Diffstat (limited to 'src')
-rw-r--r-- | src/rebar_app_discover.erl | 3 | ||||
-rw-r--r-- | src/rebar_erlydtl_compiler.erl | 5 | ||||
-rw-r--r-- | src/rebar_prv_install_deps.erl | 68 | ||||
-rw-r--r-- | src/rebar_topo.erl | 8 |
4 files changed, 49 insertions, 35 deletions
diff --git a/src/rebar_app_discover.erl b/src/rebar_app_discover.erl index 9fa7b4a..147bc92 100644 --- a/src/rebar_app_discover.erl +++ b/src/rebar_app_discover.erl @@ -13,7 +13,8 @@ do(State, LibDirs) -> Apps = find_apps(Dirs, all), ProjectDeps = rebar_state:deps_names(State), lists:foldl(fun(AppInfo, StateAcc) -> - rebar_state:project_apps(StateAcc, rebar_app_info:deps(AppInfo, ProjectDeps)) + ProjectDeps1 = lists:delete(rebar_app_info:name(AppInfo), ProjectDeps), + rebar_state:project_apps(StateAcc, rebar_app_info:deps(AppInfo, ProjectDeps1)) end, State, Apps). -spec all_app_dirs(list(file:name())) -> list(file:name()). diff --git a/src/rebar_erlydtl_compiler.erl b/src/rebar_erlydtl_compiler.erl index 88ffb96..5fecd48 100644 --- a/src/rebar_erlydtl_compiler.erl +++ b/src/rebar_erlydtl_compiler.erl @@ -126,9 +126,10 @@ init(State) -> do(Config) -> MultiDtlOpts = erlydtl_opts(Config), OrigPath = code:get_path(), - true = code:add_path(rebar_utils:ebin_dir()), + %true = code:add_path(rebar_utils:ebin_dir()), Result = lists:foldl(fun(DtlOpts, _) -> + file:make_dir(option(out_dir, DtlOpts)), rebar_base_compiler:run(Config, [], option(doc_root, DtlOpts), option(source_ext, DtlOpts), @@ -231,7 +232,7 @@ do_compile(Config, Source, Target, DtlOpts) -> ?INFO("Compiling \"~s\" -> \"~s\" with options:~n ~s~n", [Source, Target, io_lib:format("~p", [Opts])]), case erlydtl:compile(ec_cnv:to_binary(Source), - ec_cnv:to_atom(module_name(Target)), + list_to_atom(module_name(Target)), Opts) of {ok, _Mod} -> ok; diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 8b56ac3..6cd004c 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -75,8 +75,12 @@ do(State) -> end, Source = ProjectApps ++ rebar_state:src_apps(State1), - {ok, Sort} = rebar_topo:sort_apps(Source), - {ok, rebar_state:set(State1, deps_to_build, lists:dropwhile(fun is_valid/1, Sort -- ProjectApps))}. + 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))}; + {error, Error} -> + {error, Error} + end. -spec get_deps_dir(rebar_state:t()) -> file:filename_all(). get_deps_dir(State) -> @@ -114,19 +118,22 @@ handle_deps(State, Deps, Update) -> %% Find pkg deps needed {ok, S} = rlx_depsolver:solve(Graph, PkgDeps1), %% Create app_info record for each pkg dep - lists:map(fun(Pkg) -> - AppInfo = package_to_app(DepsDir - ,Packages - ,Pkg), - maybe_fetch(AppInfo, Update), - AppInfo - end, S) + lists:flatmap(fun(Pkg) -> + AppInfo = package_to_app(DepsDir + ,Packages + ,Pkg), + case maybe_fetch(AppInfo, Update) of + false -> + []; + true -> + AppInfo + end + end, S) end, AllDeps = lists:ukeymerge(2 ,lists:ukeysort(2, rebar_state:src_apps(State2)) ,lists:ukeysort(2, Solved)), - %% Sort all apps to build order State3 = rebar_state:set(State2, all_deps, AllDeps), {ok, State3}. @@ -221,28 +228,33 @@ handle_dep(DepsDir, AppInfo) -> -spec maybe_fetch(rebar_app_info:t(), boolean()) -> boolean(). maybe_fetch(AppInfo, Update) -> AppDir = ec_cnv:to_list(rebar_app_info:dir(AppInfo)), - %Apps = rebar_app_discover:find_apps([get_deps_dir(State)], all), - %case rebar_app_utils:find(rebar_app_info:name(AppInfo), Apps) of - Exists = case rebar_app_utils:is_app_dir(filename:absname(AppDir)++"-*") of - {true, _} -> - true; - _ -> - case rebar_app_utils:is_app_dir(filename:absname(AppDir)) of + Apps = rebar_app_discover:find_apps(["_checkouts"], all), + case rebar_app_utils:find(rebar_app_info:name(AppInfo), Apps) of + {ok, _} -> + %% Don't fetch dep if it exists in the _checkouts dir + false; + error -> + Exists = case rebar_app_utils:is_app_dir(filename:absname(AppDir)++"-*") of {true, _} -> true; _ -> - false - end - end, + case rebar_app_utils:is_app_dir(filename:absname(AppDir)) of + {true, _} -> + true; + _ -> + false + end + end, - case not Exists orelse Update of - true -> - ?INFO("Fetching ~s~n", [rebar_app_info:name(AppInfo)]), - Source = rebar_app_info:source(AppInfo), - rebar_fetch:download_source(AppDir, Source), - true; - _ -> - false + case not Exists orelse Update of + true -> + ?INFO("Fetching ~s~n", [rebar_app_info:name(AppInfo)]), + Source = rebar_app_info:source(AppInfo), + rebar_fetch:download_source(AppDir, Source), + true; + _ -> + false + end end. -spec parse_deps(binary(), [dep()]) -> {[rebar_app_info:t()], [pkg_dep()]}. diff --git a/src/rebar_topo.erl b/src/rebar_topo.erl index 9ab4c28..e4a3e26 100644 --- a/src/rebar_topo.erl +++ b/src/rebar_topo.erl @@ -76,10 +76,10 @@ format_error({cycle, Pairs}) -> "before we can continue:\n", case Pairs of [{P1, P2}] -> - [rebar_util:indent(2), erlang:atom_to_list(P2), "->", erlang:atom_to_list(P1)]; + [rebar_utils:indent(2), P2, "->", P1]; [{P1, P2} | Rest] -> - [rebar_util:indent(2), erlang:atom_to_list(P2), "->", erlang:atom_to_list(P1), - [["-> ", erlang:atom_to_list(PP2), " -> ", erlang:atom_to_list(PP1)] || {PP1, PP2} <- Rest]]; + [rebar_utils:indent(2), P2, "->", P1, + [["-> ", PP2, " -> ", PP1] || {PP1, PP2} <- Rest]]; [] -> [] end]. @@ -116,7 +116,7 @@ iterate([], L, All) -> iterate(Pairs, L, All) -> case subtract(lhs(Pairs), rhs(Pairs)) of [] -> - ?ERROR(format_error({cycle, Pairs}), []); + format_error({cycle, Pairs}); Lhs -> iterate(remove_pairs(Lhs, Pairs), L ++ Lhs, All) end. |