Explorar el Código

getting closer

pull/3/head
Tristan Sloughter hace 10 años
padre
commit
1549b11b88
Se han modificado 2 ficheros con 27 adiciones y 20 borrados
  1. +6
    -4
      src/rebar_fetch.erl
  2. +21
    -16
      src/rebar_prv_install_deps.erl

+ 6
- 4
src/rebar_fetch.erl Ver fichero

@ -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}) ->

+ 21
- 16
src/rebar_prv_install_deps.erl Ver fichero

@ -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, <<Name/binary, "-", FmtVsn/binary>>)),
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.

Cargando…
Cancelar
Guardar