From a3b5846b49f034854a7ea585d826ab69869320ef Mon Sep 17 00:00:00 2001 From: Carl-Johan Kjellander Date: Tue, 2 Jan 2018 15:24:07 +0100 Subject: add test for provider_hook clean --- test/rebar_hooks_SUITE.erl | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/test/rebar_hooks_SUITE.erl b/test/rebar_hooks_SUITE.erl index f7fcb82..a36dbe1 100644 --- a/test/rebar_hooks_SUITE.erl +++ b/test/rebar_hooks_SUITE.erl @@ -12,7 +12,8 @@ run_hooks_once_profiles/1, run_hooks_for_plugins/1, eunit_app_hooks/1, - deps_hook_namespace/1]). + deps_hook_namespace/1, + deps_clean_hook_namespace/1]). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). @@ -36,7 +37,7 @@ end_per_testcase(_, _Config) -> all() -> [build_and_clean_app, run_hooks_once, run_hooks_once_profiles, escriptize_artifacts, run_hooks_for_plugins, deps_hook_namespace, - eunit_app_hooks]. + deps_clean_hook_namespace, eunit_app_hooks]. %% Test post provider hook cleans compiled project app, leaving it invalid build_and_clean_app(Config) -> @@ -134,6 +135,28 @@ deps_hook_namespace(Config) -> {ok, [{dep, "some_dep"}]} ). +deps_clean_hook_namespace(Config) -> + mock_git_resource:mock([{deps, [{some_dep, "0.0.1"}]}]), + Deps = rebar_test_utils:expand_deps(git, [{"some_dep", "0.0.1", []}]), + TopDeps = rebar_test_utils:top_level_deps(Deps), + + RebarConfig = [ + {deps, TopDeps}, + {overrides, [ + {override, some_dep, [ + {provider_hooks, [ + {pre, [ + {compile, clean} + ]} + ]} + ]} + ]} + ], + rebar_test_utils:run_and_check( + Config, RebarConfig, ["clean"], + {ok, [{dep, "some_dep"}]} + ). + %% Checks that a hook that is defined on an app (not a top level hook of a project with subapps) is run eunit_app_hooks(Config) -> AppDir = ?config(apps, Config), -- cgit v1.1 From fee322edb91bd04fc24287f28d94c08fe0632812 Mon Sep 17 00:00:00 2001 From: Carl-Johan Kjellander Date: Tue, 19 Dec 2017 13:29:53 +0100 Subject: run hooks and plugins during clean for deps find_apps didn't read config files so no hooks were in the app_infos, and now that hooks are being done rebar needs plugins to be able to run clean plugin hooks in deps. --- src/rebar_app_discover.erl | 11 ++++++++--- src/rebar_prv_clean.erl | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/rebar_app_discover.erl b/src/rebar_app_discover.erl index cdd183c..1c02a48 100644 --- a/src/rebar_app_discover.erl +++ b/src/rebar_app_discover.erl @@ -331,14 +331,19 @@ create_app_info(AppInfo, AppDir, AppFile) -> AppInfo2 = rebar_app_info:applications( rebar_app_info:app_details(AppInfo1, AppDetails), IncludedApplications++Applications), - Valid = case rebar_app_utils:validate_application_info(AppInfo2) =:= true - andalso rebar_app_info:has_all_artifacts(AppInfo2) =:= true of + C = rebar_config:consult(AppDir), + AppInfo3 = rebar_app_info:update_opts(AppInfo2, + rebar_app_info:opts(AppInfo2), C), + ?DEBUG("create_app_info(~p, ~p, ~p) -> ~n~p~n", + [AppInfo, AppDir, AppFile, AppInfo3]), + Valid = case rebar_app_utils:validate_application_info(AppInfo3) =:= true + andalso rebar_app_info:has_all_artifacts(AppInfo3) =:= true of true -> true; _ -> false end, - rebar_app_info:dir(rebar_app_info:valid(AppInfo2, Valid), AppDir). + rebar_app_info:dir(rebar_app_info:valid(AppInfo3, Valid), AppDir). %% @doc Read in and parse the .app file if it is availabe. Do the same for %% the .app.src file if it exists. diff --git a/src/rebar_prv_clean.erl b/src/rebar_prv_clean.erl index aa0b5af..4da0a64 100644 --- a/src/rebar_prv_clean.erl +++ b/src/rebar_prv_clean.erl @@ -12,7 +12,7 @@ -include("rebar.hrl"). -define(PROVIDER, clean). --define(DEPS, [app_discovery]). +-define(DEPS, [app_discovery, install_deps]). %% =================================================================== %% Public API -- cgit v1.1