diff options
author | Tristan Sloughter <t@crashfast.com> | 2014-08-28 09:17:01 -0500 |
---|---|---|
committer | Tristan Sloughter <t@crashfast.com> | 2014-08-28 09:17:01 -0500 |
commit | 393abe92d01040a847bfc42a80d61b33f0254ca7 (patch) | |
tree | 2441809c82d2dc5fe4ac4c818b6714221a0915e2 /src/rebar_prv_install_deps.erl | |
parent | 97db15d2a58de542aaef4075cddc3769f0308759 (diff) |
use locks if exists
Diffstat (limited to 'src/rebar_prv_install_deps.erl')
-rw-r--r-- | src/rebar_prv_install_deps.erl | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 27088bc..a01db16 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -66,32 +66,38 @@ init(State) -> do(State) -> %% Read in package index and dep graph {Packages, Graph} = rebar_packages:get_packages(State), - - case rebar_state:get(State, deps, []) of + case rebar_state:get(State, locks, []) of [] -> - {ok, State}; - Deps -> - %% Split source deps form binary deps, needed to keep backwards compatibility - {SrcDeps, Goals} = parse_deps(Deps), - case update_src_deps(State, SrcDeps, Goals, []) of - {State1, SrcDeps1, [], Locked} -> - {ok, rebar_state:set(State1, deps, Locked)}; - {State1, SrcDeps1, Goals1, Locked} -> - {ok, Solved} = rlx_depsolver:solve(Graph, Goals1), - M = lists:map(fun({Name, Vsn}) -> - FmtVsn = ec_cnv:to_binary(rlx_depsolver:format_version(Vsn)), - {ok, P} = dict:find({Name, FmtVsn}, Packages), - Link = proplists:get_value(<<"link">>, P), - #dep{name=Name, - vsn=FmtVsn, - source={Name - ,FmtVsn - ,Link}} - end, Solved), - {State2, Deps1, Locked2} = update_deps(State1, M), - State3 = rebar_state:set(State2, deps, Locked++Locked2), - {ok, rebar_state:set(State3, goals, Goals1)} - end + case rebar_state:get(State, deps, []) of + [] -> + {ok, State}; + Deps -> + %% Split source deps form binary deps, needed to keep backwards compatibility + {SrcDeps, Goals} = parse_deps(Deps), + case update_src_deps(State, SrcDeps, Goals, []) of + {State1, SrcDeps1, [], Locked} -> + {ok, rebar_state:set(State1, locks, Locked)}; + {State1, SrcDeps1, Goals1, Locked} -> + {ok, Solved} = rlx_depsolver:solve(Graph, Goals1), + M = lists:map(fun({Name, Vsn}) -> + FmtVsn = ec_cnv:to_binary(rlx_depsolver:format_version(Vsn)), + {ok, P} = dict:find({Name, FmtVsn}, Packages), + Link = proplists:get_value(<<"link">>, P), + #dep{name=Name, + vsn=FmtVsn, + source={Name + ,FmtVsn + ,Link}} + end, Solved), + {State2, Deps1, Locked2} = update_deps(State1, M), + State3 = rebar_state:set(State2, locks, Locked++Locked2), + {ok, rebar_state:set(State3, goals, Goals1)} + end + end; + Locks -> + Locks1 = [new(Lock) || Lock <- Locks], + {State2, _, _} = update_deps(State, Locks1), + {ok, State2} end. %% set REBAR_DEPS_DIR and ERL_LIBS environment variables @@ -124,8 +130,12 @@ get_deps_dir(DepsDir, App) -> %% Internal functions %% =================================================================== -new({Name, Vsn, Source})-> +new({Name, Vsn, Source}) when is_tuple(Source) -> #dep{name=ec_cnv:to_binary(Name), vsn=ec_cnv:to_binary(Vsn), source=Source}; +new({Name, Vsn, Source}) when is_binary(Source) -> + #dep{name=ec_cnv:to_binary(Name) + ,vsn=ec_cnv:to_binary(Vsn) + ,source={ec_cnv:to_binary(Name), ec_cnv:to_binary(Vsn), Source}}; new(Name) -> #dep{name=ec_cnv:to_binary(Name)}. |