From 98752aab9390137d7cba0b70e0c1c08b9ca308d4 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Wed, 26 Aug 2015 22:13:04 -0500 Subject: wip: move state into app_info --- src/rebar_prv_install_deps.erl | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 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 ca9344b..06033f6 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -254,28 +254,29 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Profiles = rebar_state:current_profiles(State), Name = rebar_app_info:name(AppInfo), - %% Deps may be under a sub project app, find it and use its state if so - S = rebar_app_info:state(AppInfo), C = rebar_config:consult(rebar_app_info:dir(AppInfo)), - S1 = rebar_state:new(S, C, AppInfo), - S2 = rebar_state:apply_overrides(S1, Name), + AppInfo0 = rebar_app_info:update_opts(AppInfo, rebar_app_info:opts(AppInfo), C), + AppInfo1 = rebar_app_info:apply_overrides(AppInfo0, Name), - S3 = rebar_state:apply_profiles(S2, Profiles), - Plugins = rebar_state:get(S3, plugins, []), - S4 = rebar_state:set(S3, {plugins, Profile}, Plugins), + AppInfo2 = rebar_app_info:apply_profiles(AppInfo1, Profiles), + Plugins = rebar_app_info:get(AppInfo2, plugins, []), + AppInfo3 = rebar_app_info:set(AppInfo2, {plugins, Profile}, Plugins), - rebar_utils:check_min_otp_version(rebar_state:get(S4, minimum_otp_vsn, undefined)), - rebar_utils:check_blacklisted_otp_versions(rebar_state:get(S4, blacklisted_otp_vsns, [])), + rebar_utils:check_min_otp_version(rebar_app_info:get(AppInfo3, minimum_otp_vsn, undefined)), + rebar_utils:check_blacklisted_otp_versions(rebar_app_info:get(AppInfo3, blacklisted_otp_vsns, [])), %% Dep may have plugins to install. Find and install here. - S5 = rebar_plugins:install(S4), - AppInfo1 = rebar_app_info:state(AppInfo, S5), + _S = rebar_plugins:install(State, AppInfo3), + %% TODO: Plugin Providers?? + + %AppInfo1 = rebar_app_info:state(AppInfo, S5), + %AppInfo2 = rebar_app_info:opts(AppInfo1, rebar_state:opts(S5)), %% Upgrade lock level to be the level the dep will have in this dep tree - Deps = rebar_state:get(S5, {deps, default}, []), - AppInfo2 = rebar_app_info:deps(AppInfo1, rebar_state:deps_names(Deps)), - Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, S5, Locks, Level+1), - {AppInfo2, Deps1, State}. + Deps = rebar_app_info:get(AppInfo3, {deps, default}, []), + AppInfo4 = rebar_app_info:deps(AppInfo3, rebar_state:deps_names(Deps)), + Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, State, Locks, Level+1), + {AppInfo4, Deps1, State}. -spec maybe_fetch(rebar_app_info:t(), atom(), boolean(), sets:set(binary()), rebar_state:t()) -> {boolean(), rebar_app_info:t()}. @@ -420,4 +421,4 @@ warn_skip_deps(AppInfo, State) -> not_needs_compile(App) -> not(rebar_app_info:is_checkout(App)) andalso rebar_app_info:valid(App) - andalso rebar_state:has_all_artifacts(rebar_app_info:state(App)) =:= true. + andalso rebar_app_info:has_all_artifacts(App) =:= true. -- cgit v1.1 From f209ccc2b8ea79279532f1fe1debe24aa0e6a488 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 29 Aug 2015 17:07:18 -0500 Subject: remove state record from app_info record --- src/rebar_prv_install_deps.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 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 06033f6..58557bf 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -294,9 +294,9 @@ maybe_fetch(AppInfo, Profile, Upgrade, Seen, State) -> {true, rebar_app_info:valid(update_app_info(AppDir, AppInfo), false)}; {true, AppInfo1} -> %% Preserve the state we created with overrides - AppInfo2 = copy_app_info(AppInfo, AppInfo1), - AppState = rebar_app_info:state(AppInfo), - AppInfo3 = rebar_app_info:state(AppInfo2, AppState), + AppInfo3 = copy_app_info(AppInfo, AppInfo1), + %% AppState = rebar_app_info:state(AppInfo), + %% AppInfo3 = rebar_app_info:state(AppInfo2, AppState), case sets:is_element(rebar_app_info:name(AppInfo3), Seen) of true -> {false, AppInfo3}; -- cgit v1.1 From 32d07ec0767524c8bdf0321c70a741ab64dedd78 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sat, 29 Aug 2015 21:41:58 -0500 Subject: build on already created AppInfo instead of having to do copy --- src/rebar_prv_install_deps.erl | 43 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 33 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 58557bf..6ae22d6 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -287,24 +287,20 @@ maybe_fetch(AppInfo, Profile, Upgrade, Seen, State) -> true -> {false, AppInfo}; false -> - case rebar_app_discover:find_app(AppDir, all) of + case rebar_app_discover:find_app(AppInfo, AppDir, all) of false -> true = fetch_app(AppInfo, AppDir, State), maybe_symlink_default(State, Profile, AppDir, AppInfo), {true, rebar_app_info:valid(update_app_info(AppDir, AppInfo), false)}; {true, AppInfo1} -> - %% Preserve the state we created with overrides - AppInfo3 = copy_app_info(AppInfo, AppInfo1), - %% AppState = rebar_app_info:state(AppInfo), - %% AppInfo3 = rebar_app_info:state(AppInfo2, AppState), - case sets:is_element(rebar_app_info:name(AppInfo3), Seen) of + case sets:is_element(rebar_app_info:name(AppInfo1), Seen) of true -> - {false, AppInfo3}; + {false, AppInfo1}; false -> - maybe_symlink_default(State, Profile, AppDir, AppInfo3), + maybe_symlink_default(State, Profile, AppDir, AppInfo1), MaybeUpgrade = maybe_upgrade(AppInfo, AppDir, Upgrade, State), - AppInfo4 = update_app_info(AppDir, AppInfo3), - {MaybeUpgrade, AppInfo4} + AppInfo2 = update_app_info(AppDir, AppInfo1), + {MaybeUpgrade, AppInfo2} end end end. @@ -361,32 +357,13 @@ fetch_app(AppInfo, AppDir, State) -> %% So this is the first time for newly downloaded apps that its .app/.app.src data can %% be read in an parsed. update_app_info(AppDir, AppInfo) -> - case rebar_app_info:discover(AppDir) of - {ok, Found} -> - AppDetails = rebar_app_info:app_details(Found), - Vsn = rebar_app_info:original_vsn(Found), - Applications = proplists:get_value(applications, AppDetails, []), - IncludedApplications = proplists:get_value(included_applications, AppDetails, []), - AppInfo1 = rebar_app_info:original_vsn(rebar_app_info:applications( - rebar_app_info:app_details(AppInfo, AppDetails), - IncludedApplications++Applications), Vsn), - AppInfo2 = copy_app_info(AppInfo, AppInfo1), - rebar_app_info:valid(AppInfo2, undefined); - not_found -> + case rebar_app_discover:find_app(AppInfo, AppDir, all) of + {true, AppInfo1} -> + AppInfo1; + false -> throw(?PRV_ERROR({dep_app_not_found, AppDir, rebar_app_info:name(AppInfo)})) end. -copy_app_info(OldAppInfo, NewAppInfo) -> - Deps = rebar_app_info:deps(OldAppInfo), - ResourceType = rebar_app_info:resource_type(OldAppInfo), - Parent = rebar_app_info:parent(OldAppInfo), - Source = rebar_app_info:source(OldAppInfo), - - rebar_app_info:deps( - rebar_app_info:resource_type( - rebar_app_info:source( - rebar_app_info:parent(NewAppInfo, Parent), Source), ResourceType), Deps). - maybe_upgrade(AppInfo, AppDir, Upgrade, State) -> Source = rebar_app_info:source(AppInfo), case Upgrade orelse rebar_app_info:is_lock(AppInfo) of -- cgit v1.1 From 8e25a45cbbc3ba796e3cb4331c15a2914fa0e644 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sun, 30 Aug 2015 13:39:38 -0500 Subject: update use of hooks and plugins with state in app_info --- src/rebar_prv_install_deps.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 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 6ae22d6..aeda252 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -256,7 +256,7 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> C = rebar_config:consult(rebar_app_info:dir(AppInfo)), AppInfo0 = rebar_app_info:update_opts(AppInfo, rebar_app_info:opts(AppInfo), C), - AppInfo1 = rebar_app_info:apply_overrides(AppInfo0, Name), + AppInfo1 = rebar_app_info:apply_overrides(rebar_state:overrides(State), AppInfo0), AppInfo2 = rebar_app_info:apply_profiles(AppInfo1, Profiles), Plugins = rebar_app_info:get(AppInfo2, plugins, []), @@ -266,7 +266,7 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> rebar_utils:check_blacklisted_otp_versions(rebar_app_info:get(AppInfo3, blacklisted_otp_vsns, [])), %% Dep may have plugins to install. Find and install here. - _S = rebar_plugins:install(State, AppInfo3), + State1 = rebar_plugins:install(State, AppInfo3), %% TODO: Plugin Providers?? %AppInfo1 = rebar_app_info:state(AppInfo, S5), @@ -276,7 +276,7 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Deps = rebar_app_info:get(AppInfo3, {deps, default}, []), AppInfo4 = rebar_app_info:deps(AppInfo3, rebar_state:deps_names(Deps)), Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, State, Locks, Level+1), - {AppInfo4, Deps1, State}. + {AppInfo4, Deps1, State1}. -spec maybe_fetch(rebar_app_info:t(), atom(), boolean(), sets:set(binary()), rebar_state:t()) -> {boolean(), rebar_app_info:t()}. -- cgit v1.1 From a6ca5d5e25dbeb851e0f4c9fd91aa74e15f25ce8 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Sun, 30 Aug 2015 17:02:42 -0500 Subject: fixes for overrides of deps --- src/rebar_prv_install_deps.erl | 7 +++---- 1 file changed, 3 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 aeda252..789ad2f 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -253,11 +253,9 @@ update_unseen_dep(AppInfo, Profile, Level, Deps, Apps, State, Upgrade, Seen, Loc handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Profiles = rebar_state:current_profiles(State), Name = rebar_app_info:name(AppInfo), - C = rebar_config:consult(rebar_app_info:dir(AppInfo)), AppInfo0 = rebar_app_info:update_opts(AppInfo, rebar_app_info:opts(AppInfo), C), - AppInfo1 = rebar_app_info:apply_overrides(rebar_state:overrides(State), AppInfo0), - + AppInfo1 = rebar_app_info:apply_overrides(rebar_app_info:get(AppInfo, overrides, []), AppInfo0), AppInfo2 = rebar_app_info:apply_profiles(AppInfo1, Profiles), Plugins = rebar_app_info:get(AppInfo2, plugins, []), AppInfo3 = rebar_app_info:set(AppInfo2, {plugins, Profile}, Plugins), @@ -275,7 +273,8 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> %% Upgrade lock level to be the level the dep will have in this dep tree Deps = rebar_app_info:get(AppInfo3, {deps, default}, []), AppInfo4 = rebar_app_info:deps(AppInfo3, rebar_state:deps_names(Deps)), - Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, State, Locks, Level+1), + Overrides = rebar_state:overrides(State) ++ rebar_app_info:get(AppInfo0, overrides, []), + Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, rebar_state:overrides(State, Overrides), Locks, Level+1), {AppInfo4, Deps1, State1}. -spec maybe_fetch(rebar_app_info:t(), atom(), boolean(), -- cgit v1.1 From e6f6ccc7570ad57f6d1416b3f8c59551b7aaa5c6 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Mon, 31 Aug 2015 21:40:33 -0500 Subject: more cleanup --- src/rebar_prv_install_deps.erl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 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 789ad2f..cd5f068 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -254,9 +254,11 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Profiles = rebar_state:current_profiles(State), Name = rebar_app_info:name(AppInfo), C = rebar_config:consult(rebar_app_info:dir(AppInfo)), + AppInfo0 = rebar_app_info:update_opts(AppInfo, rebar_app_info:opts(AppInfo), C), AppInfo1 = rebar_app_info:apply_overrides(rebar_app_info:get(AppInfo, overrides, []), AppInfo0), AppInfo2 = rebar_app_info:apply_profiles(AppInfo1, Profiles), + Plugins = rebar_app_info:get(AppInfo2, plugins, []), AppInfo3 = rebar_app_info:set(AppInfo2, {plugins, Profile}, Plugins), @@ -265,16 +267,15 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> %% Dep may have plugins to install. Find and install here. State1 = rebar_plugins:install(State, AppInfo3), - %% TODO: Plugin Providers?? - - %AppInfo1 = rebar_app_info:state(AppInfo, S5), - %AppInfo2 = rebar_app_info:opts(AppInfo1, rebar_state:opts(S5)), %% Upgrade lock level to be the level the dep will have in this dep tree Deps = rebar_app_info:get(AppInfo3, {deps, default}, []), AppInfo4 = rebar_app_info:deps(AppInfo3, rebar_state:deps_names(Deps)), + + %% Keep all overrides from the global config and this dep when parsing its deps Overrides = rebar_state:overrides(State) ++ rebar_app_info:get(AppInfo0, overrides, []), - Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, rebar_state:overrides(State, Overrides), Locks, Level+1), + Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, rebar_state:overrides(State, Overrides) + ,Locks, Level+1), {AppInfo4, Deps1, State1}. -spec maybe_fetch(rebar_app_info:t(), atom(), boolean(), -- cgit v1.1 From b2c051452e336f9727b0f93ddb2f1abe970ed325 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Tue, 1 Sep 2015 17:25:22 -0500 Subject: remove overrides element from state record --- src/rebar_prv_install_deps.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 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 cd5f068..cb1bf00 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -273,8 +273,8 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> AppInfo4 = rebar_app_info:deps(AppInfo3, rebar_state:deps_names(Deps)), %% Keep all overrides from the global config and this dep when parsing its deps - Overrides = rebar_state:overrides(State) ++ rebar_app_info:get(AppInfo0, overrides, []), - Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, rebar_state:overrides(State, Overrides) + Overrides = rebar_app_info:get(AppInfo0, overrides, []), + Deps1 = rebar_app_utils:parse_deps(Name, DepsDir, Deps, rebar_state:set(State, overrides, Overrides) ,Locks, Level+1), {AppInfo4, Deps1, State1}. -- cgit v1.1 From a81444ae1c32fb1ff73bd571327fd6adeec9901f Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Tue, 1 Sep 2015 19:42:01 -0500 Subject: move otp version verification to a single app_info function --- src/rebar_prv_install_deps.erl | 4 ++-- 1 file changed, 2 insertions(+), 2 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 cb1bf00..fd1aa49 100644 --- a/src/rebar_prv_install_deps.erl +++ b/src/rebar_prv_install_deps.erl @@ -262,8 +262,8 @@ handle_dep(State, Profile, DepsDir, AppInfo, Locks, Level) -> Plugins = rebar_app_info:get(AppInfo2, plugins, []), AppInfo3 = rebar_app_info:set(AppInfo2, {plugins, Profile}, Plugins), - rebar_utils:check_min_otp_version(rebar_app_info:get(AppInfo3, minimum_otp_vsn, undefined)), - rebar_utils:check_blacklisted_otp_versions(rebar_app_info:get(AppInfo3, blacklisted_otp_vsns, [])), + %% Will throw an exception if checks fail + rebar_app_info:verify_otp_vsn(AppInfo3), %% Dep may have plugins to install. Find and install here. State1 = rebar_plugins:install(State, AppInfo3), -- cgit v1.1