summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2018-02-21 19:25:12 -0500
committerGitHub <noreply@github.com>2018-02-21 19:25:12 -0500
commit94ea0630b1b9b06459857e98f83c8b0ef5dbecc4 (patch)
tree0fbccee2040e1a152263940f8392b00109e178c9
parentea79c6ad8815f6b74fc673668ba5f63f8763b2e0 (diff)
parentfee322edb91bd04fc24287f28d94c08fe0632812 (diff)
Merge pull request #1698 from campanja-forks/run-clean-hooks
fix hooks and plugins usage when cleaning build artifacts for deps
-rw-r--r--src/rebar_app_discover.erl11
-rw-r--r--src/rebar_prv_clean.erl2
-rw-r--r--test/rebar_hooks_SUITE.erl27
3 files changed, 34 insertions, 6 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
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),