summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_prv_clean.erl26
-rw-r--r--test/rebar_as_SUITE.erl22
2 files changed, 35 insertions, 13 deletions
diff --git a/src/rebar_prv_clean.erl b/src/rebar_prv_clean.erl
index 7f952e3..8f31fdd 100644
--- a/src/rebar_prv_clean.erl
+++ b/src/rebar_prv_clean.erl
@@ -27,32 +27,35 @@ init(State) ->
{example, "rebar3 clean"},
{short_desc, "Remove compiled beam files from apps."},
{desc, "Remove compiled beam files from apps."},
- {opts, [{all, $a, "all", undefined, "Clean all apps include deps"}]}])),
+ {opts, [{all, $a, "all", undefined, "Clean all apps include deps"},
+ {profile, $p, "profile", string, "Clean under profile. Equivalent to `rebar3 as <profile> clean`"}]}])),
{ok, State1}.
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) ->
Providers = rebar_state:providers(State),
- {all, All} = handle_args(State),
+ {All, Profiles} = handle_args(State),
+
+ State1 = rebar_state:apply_profiles(State, [list_to_atom(X) || X <- Profiles]),
Cwd = rebar_dir:get_cwd(),
- rebar_hooks:run_all_hooks(Cwd, pre, ?PROVIDER, Providers, State),
+ rebar_hooks:run_all_hooks(Cwd, pre, ?PROVIDER, Providers, State1),
case All of
true ->
- DepsDir = rebar_dir:deps_dir(State),
+ DepsDir = rebar_dir:deps_dir(State1),
AllApps = rebar_app_discover:find_apps([filename:join(DepsDir, "*")], all),
- clean_apps(State, Providers, AllApps);
+ clean_apps(State1, Providers, AllApps);
false ->
- ProjectApps = rebar_state:project_apps(State),
- clean_apps(State, Providers, ProjectApps)
+ ProjectApps = rebar_state:project_apps(State1),
+ clean_apps(State1, Providers, ProjectApps)
end,
- clean_extras(State),
+ clean_extras(State1),
- rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State),
+ rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State1),
- {ok, State}.
+ {ok, State1}.
-spec format_error(any()) -> iolist().
format_error(Reason) ->
@@ -78,4 +81,5 @@ clean_extras(State) ->
handle_args(State) ->
{Args, _} = rebar_state:command_parsed_args(State),
All = proplists:get_value(all, Args, false),
- {all, All}.
+ Profiles = proplists:get_all_values(profile, Args),
+ {All, Profiles}.
diff --git a/test/rebar_as_SUITE.erl b/test/rebar_as_SUITE.erl
index 99c7e30..0f37dc8 100644
--- a/test/rebar_as_SUITE.erl
+++ b/test/rebar_as_SUITE.erl
@@ -13,7 +13,8 @@
as_comma_then_space/1,
as_dir_name/1,
as_with_task_args/1,
- warn_on_empty_profile/1]).
+ warn_on_empty_profile/1,
+ clean_as_profile/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -32,7 +33,7 @@ all() -> [as_basic, as_multiple_profiles, as_multiple_tasks,
as_multiple_profiles_multiple_tasks,
as_comma_placement, as_comma_then_space,
as_dir_name, as_with_task_args,
- warn_on_empty_profile].
+ warn_on_empty_profile, clean_as_profile].
as_basic(Config) ->
AppDir = ?config(apps, Config),
@@ -166,3 +167,20 @@ warn_match(App, History) ->
false
end,
History).
+
+clean_as_profile(Config) ->
+ AppDir = ?config(apps, Config),
+
+ Name = rebar_test_utils:create_random_name("clean_as_profile_"),
+ Vsn = rebar_test_utils:create_random_vsn(),
+ rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
+
+ rebar_test_utils:run_and_check(Config,
+ [],
+ ["as", "foo", "compile"],
+ {ok, [{app, Name, valid}]}),
+
+ rebar_test_utils:run_and_check(Config,
+ [],
+ ["clean", "-a", "-p", "foo"],
+ {ok, [{app, Name, invalid}]}).