diff options
Diffstat (limited to 'src/rebar_prv_install_deps.erl')
-rw-r--r-- | src/rebar_prv_install_deps.erl | 39 |
1 files changed, 16 insertions, 23 deletions
diff --git a/src/rebar_prv_install_deps.erl b/src/rebar_prv_install_deps.erl index 0883fab..0b0f607 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -125,10 +125,7 @@ handle_deps_as_profile(Profile, State, Deps, Upgrade) -> DepsDir = profile_dep_dir(State, Profile), Deps1 = rebar_app_utils:parse_deps(DepsDir, Deps, State, Locks, Level), ProfileLevelDeps = [{Profile, Deps1, Level}], - Graph = rebar_state:packages_graph(State), - Registry = rebar_packages:registry(State), - State1 = rebar_state:packages_graph(rebar_state:registry(State, Registry), Graph), - handle_profile_level(ProfileLevelDeps, [], sets:new(), Upgrade, Locks, State1, Graph). + handle_profile_level(ProfileLevelDeps, [], sets:new(), Upgrade, Locks, State). %% =================================================================== %% Internal functions @@ -141,10 +138,7 @@ deps_per_profile(Profiles, Upgrade, State) -> Deps = lists:foldl(fun(Profile, DepAcc) -> [parsed_profile_deps(State, Profile, Level) | DepAcc] end, [], Profiles), - Graph = rebar_state:packages_graph(State), - Registry = rebar_packages:registry(State), - State1 = rebar_state:packages_graph(rebar_state:registry(State, Registry), Graph), - handle_profile_level(Deps, [], sets:new(), Upgrade, Locks, State1, Graph). + handle_profile_level(Deps, [], sets:new(), Upgrade, Locks, State). parsed_profile_deps(State, Profile, Level) -> ParsedDeps = rebar_state:get(State, {parsed_deps, Profile}, []), @@ -153,17 +147,17 @@ parsed_profile_deps(State, Profile, Level) -> %% Level-order traversal of all dependencies, across profiles. %% If profiles x,y,z are present, then the traversal will go: %% x0, y0, z0, x1, y1, z1, ..., xN, yN, zN. -handle_profile_level([], Apps, _Seen, _Upgrade, _Locks, State, _Graph) -> +handle_profile_level([], Apps, _Seen, _Upgrade, _Locks, State) -> {Apps, State}; -handle_profile_level([{Profile, Deps, Level} | Rest], Apps, Seen, Upgrade, Locks, State, Graph) -> +handle_profile_level([{Profile, Deps, Level} | Rest], Apps, Seen, Upgrade, Locks, State) -> {Deps1, Apps1, State1, Seen1} = update_deps(Profile, Level, Deps, Apps - ,State, Upgrade, Seen, Locks, Graph), + ,State, Upgrade, Seen, Locks), Deps2 = case Deps1 of [] -> Rest; _ -> Rest ++ [{Profile, Deps1, Level+1}] end, - handle_profile_level(Deps2, Apps1, sets:union(Seen, Seen1), Upgrade, Locks, State1, Graph). + handle_profile_level(Deps2, Apps1, sets:union(Seen, Seen1), Upgrade, Locks, State1). find_cycles(Apps) -> case rebar_digraph:compile_order(Apps) of @@ -201,17 +195,17 @@ maybe_lock(Profile, AppInfo, Seen, State, Level) -> {sets:add_element(Name, Seen), State} end. -update_deps(Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks, Graph) -> +update_deps(Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks) -> lists:foldl( fun(AppInfo, {DepsAcc, AppsAcc, StateAcc, SeenAcc}) -> update_dep(AppInfo, Profile, Level, DepsAcc, AppsAcc, StateAcc, - Upgrade, SeenAcc, Locks, Graph) + Upgrade, SeenAcc, Locks) end, {[], Apps, State, Seen}, rebar_utils:sort_deps(Deps)). -update_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks, Graph) -> +update_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks) -> %% If not seen, add to list of locks to write out Name = rebar_app_info:name(AppInfo), case sets:is_element(Name, Seen) of @@ -222,7 +216,7 @@ update_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks, Gra false -> update_unseen_dep(AppInfo, Profile, Level, Deps, Apps, - State, Upgrade, Seen, Locks, Graph) + State, Upgrade, Seen, Locks) end. profile_dep_dir(State, Profile) -> @@ -242,24 +236,23 @@ update_seen_dep(AppInfo, _Profile, _Level, Deps, Apps, State, Upgrade, Seen, Loc end, {Deps, Apps, State, Seen}. -update_unseen_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks, Graph) -> +update_unseen_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Locks) -> {NewSeen, State1} = maybe_lock(Profile, AppInfo, Seen, State, Level), {_, AppInfo1} = maybe_fetch(AppInfo, Profile, Upgrade, Seen, State1), DepsDir = profile_dep_dir(State, Profile), {AppInfo2, NewDeps, State2} = - handle_dep(State1, Profile, DepsDir, AppInfo1, Locks, Level, Graph), + handle_dep(State1, Profile, DepsDir, AppInfo1, Locks, Level), AppInfo3 = rebar_app_info:dep_level(AppInfo2, Level), {NewDeps ++ Deps, [AppInfo3 | Apps], State2, NewSeen}. --spec handle_dep(rebar_state:t(), atom(), file:filename_all(), rebar_app_info:t(), list(), integer(), rebar_dict()) -> {rebar_app_info:t(), [rebar_app_info:t()], [pkg_dep()], [integer()], rebar_state:t()}. -handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level, Graph) -> +-spec handle_dep(rebar_state:t(), atom(), file:filename_all(), rebar_app_info:t(), list(), integer()) -> {rebar_app_info:t(), [rebar_app_info:t()], [pkg_dep()], [integer()], rebar_state:t()}. +handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Profiles = rebar_state:current_profiles(State), Name = rebar_app_info:name(AppInfo), Vsn = rebar_app_info:original_vsn(AppInfo), %% Deps may be under a sub project app, find it and use its state if so - S0 = rebar_app_info:state(AppInfo), - S = rebar_state:registry(S0, rebar_state:registry(State)), + S = rebar_app_info:state(AppInfo), C = rebar_config:consult(rebar_app_info:dir(AppInfo)), S1 = rebar_state:new(S, C, rebar_app_info:dir(AppInfo)), S2 = rebar_state:apply_overrides(S1, Name), @@ -278,7 +271,7 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level, Graph) -> %% Upgrade lock level to be the level the dep will have in this dep tree case rebar_app_info:resource_type(AppInfo1) of pkg -> - NewDeps = digraph:out_neighbours(Graph, {ec_cnv:to_binary(Name), ec_cnv:to_binary(Vsn)}), + NewDeps = rebar_packages:deps(Name, Vsn, S5), NewDeps1 = rebar_app_utils:parse_deps(Name, DepsDir, NewDeps, S5, Locks, Level+1), {rebar_app_info:deps(AppInfo1, NewDeps), NewDeps1, State}; _ -> |