From c283dd2c69174586e5964654a5fec8eeb66f6b6c Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Mon, 23 Feb 2015 22:57:34 +0000 Subject: Add tests and fixes for packages upgrades - Track level of packages properly, they're not level 0 anymore (this could yield an issue where a src dep takes precedence over a pkg dep) - Proper stable sort of vertices in the digraph module - PkgDeps no longer 'see themselves' when fetching and upgrading after locking themselves - Pkg Locks are added to pkg deps rather than source deps - Updating test cases to support pkg mocking on top of src mocking --- src/rebar_prv_install_deps.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/rebar_prv_install_deps.erl') diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 6270660..1e2a4e9 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -204,8 +204,9 @@ update_pkg_deps(Profile, Pkgs, Packages, Upgrade, Seen, State) -> handle_pkg_dep(Profile, Pkg, Packages, Upgrade, DepsDir, Fetched, Seen, State) -> AppInfo = package_to_app(DepsDir, Packages, Pkg), - {NewSeen, NewState} = maybe_lock(Profile, AppInfo, Seen, State, 0), - case maybe_fetch(AppInfo, Upgrade, NewSeen, NewState) of + Level = rebar_app_info:dep_level(AppInfo), + {NewSeen, NewState} = maybe_lock(Profile, AppInfo, Seen, State, Level), + case maybe_fetch(AppInfo, Upgrade, Seen, NewState) of true -> {[AppInfo | Fetched], NewSeen, NewState}; false -> @@ -234,7 +235,7 @@ maybe_lock(Profile, AppInfo, Seen, State, Level) -> {Seen, State} end. -package_to_app(DepsDir, Packages, {Name, Vsn}) -> +package_to_app(DepsDir, Packages, {Name, Vsn, Level}) -> case dict:find({Name, Vsn}, Packages) of error -> throw(?PRV_ERROR({missing_package, Name, Vsn})); @@ -244,7 +245,8 @@ package_to_app(DepsDir, Packages, {Name, Vsn}) -> {ok, AppInfo} = rebar_app_info:new(Name, Vsn), AppInfo1 = rebar_app_info:deps(AppInfo, PkgDeps), AppInfo2 = rebar_app_info:dir(AppInfo1, rebar_dir:deps_dir(DepsDir, Name)), - rebar_app_info:source(AppInfo2, {pkg, Name, Vsn}) + AppInfo3 = rebar_app_info:dep_level(AppInfo2, Level), + rebar_app_info:source(AppInfo3, {pkg, Name, Vsn}) end. -spec update_src_deps(atom(), non_neg_integer(), list(), list(), list(), rebar_state:t(), boolean(), sets:set(binary()), list()) -> {rebar_state:t(), list(), list(), sets:set(binary())}. @@ -432,6 +434,8 @@ parse_dep({Name, _Vsn, Source, Opts}, {SrcDepsAcc, PkgDepsAcc}, DepsDir, State) ?WARN("Dependency option list ~p in ~p is not supported and will be ignored", [Opts, Name]), Dep = new_dep(DepsDir, Name, [], Source, State), {[Dep | SrcDepsAcc], PkgDepsAcc}; +parse_dep({_Name, {pkg, Name, Vsn}, Level}, {SrcDepsAcc, PkgDepsAcc}, _, _) when is_integer(Level) -> + {SrcDepsAcc, [{Name, Vsn} | PkgDepsAcc]}; parse_dep({Name, Source, Level}, {SrcDepsAcc, PkgDepsAcc}, DepsDir, State) when is_tuple(Source) , is_integer(Level) -> Dep = new_dep(DepsDir, Name, [], Source, State), -- cgit v1.1