From 1549b11b88dca340a1e471775d8387ca94e377e5 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Fri, 26 Sep 2014 19:51:45 -0500 Subject: getting closer --- src/rebar_fetch.erl | 10 ++++++---- src/rebar_prv_install_deps.erl | 37 +++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/rebar_fetch.erl b/src/rebar_fetch.erl index 6b31f6c..0a90848 100644 --- a/src/rebar_fetch.erl +++ b/src/rebar_fetch.erl @@ -49,14 +49,16 @@ lock_source(_AppDir, Source) -> download_source(AppDir, Source) -> TmpDir = ec_file:insecure_mkdtemp(), AppDir1 = ec_cnv:to_list(AppDir), + ec_file:mkdir_p(AppDir1), case download_source_tmp(TmpDir, Source) of {ok, _} -> - ec_file:mkdir_p(AppDir1), ok = ec_file:copy(TmpDir, filename:absname(AppDir1), [recursive]); {tarball, File} -> - ok = erl_tar:extract(File, [{cwd, - (filename:dirname(filename:absname(AppDir1)))} - ,compressed]) + ok = erl_tar:extract(File, [{cwd, TmpDir} + ,compressed]), + BaseName = filename:basename(AppDir1), + [FromDir] = filelib:wildcard(filename:join(TmpDir, BaseName++"-*")), + ec_file:copy(FromDir, AppDir1, [recursive]) end. download_source_tmp(TmpDir, {p4, Url}) -> diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index de4be27..8071382 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -74,7 +74,7 @@ do(State) -> handle_deps(State, Locks) end, - Source = ProjectApps ++ rebar_state:get(State1, all_deps), + Source = ProjectApps ++ rebar_state:src_deps(State1), {ok, Sort} = rebar_topo:sort_apps(Source), {ok, rebar_state:set(State1, deps_to_build, lists:dropwhile(fun is_valid/1, Sort -- ProjectApps))}. @@ -151,7 +151,7 @@ package_to_app(DepsDir, Packages, Pkg={_, Vsn}) -> {ok, AppInfo} = rebar_app_info:new(Name, FmtVsn), AppInfo1 = rebar_app_info:deps(AppInfo, PkgDeps), AppInfo2 = - rebar_app_info:dir(AppInfo1, get_deps_dir(DepsDir, <>)), + rebar_app_info:dir(AppInfo1, get_deps_dir(DepsDir, Name)), rebar_app_info:source(AppInfo2, Link). -spec update_src_deps(integer(), rebar_state:t(), boolean()) -> rebar_state:t(). @@ -161,18 +161,23 @@ update_src_deps(Level, State, Update) -> case lists:foldl(fun(AppInfo, {SrcDepsAcc, BinaryDepsAcc, StateAcc}) -> Name = rebar_app_info:name(AppInfo), Locks = rebar_state:get(State, locks, []), - {_, _, _, DepLevel} = lists:keyfind(Name, 1, Locks), case Update of - {true, UpdateName, UpdateLevel} when UpdateLevel < DepLevel - ; Name =:= UpdateName -> - case maybe_fetch(AppInfo, true) of + {true, UpdateName, UpdateLevel} -> + {_, _, _, DepLevel} = lists:keyfind(Name, 1, Locks), + case UpdateLevel < DepLevel + orelse Name =:= UpdateName of true -> - {AppInfo1, NewSrcDeps, NewBinaryDeps} = - handle_dep(DepsDir, AppInfo), - AppInfo2 = rebar_app_info:dep_level(AppInfo1, Level), - {NewSrcDeps ++ SrcDepsAcc - ,NewBinaryDeps++BinaryDepsAcc - ,rebar_state:src_apps(StateAcc, AppInfo2)}; + case maybe_fetch(AppInfo, true) of + true -> + {AppInfo1, NewSrcDeps, NewBinaryDeps} = + handle_dep(DepsDir, AppInfo), + AppInfo2 = rebar_app_info:dep_level(AppInfo1, Level), + {NewSrcDeps ++ SrcDepsAcc + ,NewBinaryDeps++BinaryDepsAcc + ,rebar_state:src_apps(StateAcc, AppInfo2)}; + false -> + {SrcDepsAcc, BinaryDepsAcc, State} + end; false -> {SrcDepsAcc, BinaryDepsAcc, State} end; @@ -190,10 +195,10 @@ update_src_deps(Level, State, Update) -> end end end, {[], rebar_state:binary_deps(State), State}, SrcDeps) of - {NewSrcDeps, NewBinaryDeps, State1} when length(SrcDeps) =:= length(NewSrcDeps) -> - rebar_state:src_deps(rebar_state:binary_deps(State1, NewBinaryDeps), NewSrcDeps); - {NewSrcDeps, NewBinaryDeps, State1} -> - State2 = rebar_state:src_deps(rebar_state:binary_deps(State1, NewBinaryDeps), NewSrcDeps), + {[], NewBinaryDeps, State1} -> + rebar_state:binary_deps(State1, NewBinaryDeps); + {_NewSrcDeps, NewBinaryDeps, State1} -> + State2 = rebar_state:binary_deps(State1, NewBinaryDeps), update_src_deps(Level+1, State2, Update) end. -- cgit v1.1