diff options
Diffstat (limited to 'src/rebar_prv_clean.erl')
| -rw-r--r-- | src/rebar_prv_clean.erl | 48 |
1 files changed, 43 insertions, 5 deletions
diff --git a/src/rebar_prv_clean.erl b/src/rebar_prv_clean.erl index 72b85dc..a64e63a 100644 --- a/src/rebar_prv_clean.erl +++ b/src/rebar_prv_clean.erl @@ -27,18 +27,56 @@ init(State) -> {example, "rebar clean"}, {short_desc, "Remove compiled beam files from apps."}, {desc, ""}, - {opts, []}])), + {opts, [{all, $a, "all", undefined, "Clean all apps include deps"}]}])), {ok, State1}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. do(State) -> ProjectApps = rebar_state:project_apps(State), - lists:foreach(fun(AppInfo) -> - ?INFO("Cleaning out ~s...~n", [rebar_app_info:name(AppInfo)]), - rebar_erlc_compiler:clean(State, ec_cnv:to_list(rebar_app_info:dir(AppInfo))) - end, ProjectApps), + {all, All} = handle_args(State), + + case All of + true -> + DepsDir = rebar_state:get(State, deps_dir, ?DEFAULT_DEPS_DIR), + DepApps = rebar_app_discover:find_apps([DepsDir], all); + false -> + DepApps = [] + end, + + %% Need to allow global config vars used on deps + %% Right now no way to differeniate and just give deps a new state + EmptyState = rebar_state:new(), + clean_apps(EmptyState, DepApps), + + Cwd = rebar_utils:get_cwd(), + rebar_hooks:run_compile_hooks(Cwd, pre_hooks, clean, State), + clean_apps(State, ProjectApps), + rebar_hooks:run_compile_hooks(Cwd, post_hooks, clean, State), + {ok, State}. -spec format_error(any(), rebar_state:t()) -> {iolist(), rebar_state:t()}. format_error(Reason, State) -> {io_lib:format("~p", [Reason]), State}. + +%% =================================================================== +%% Internal functions +%% =================================================================== + +clean_apps(State, Apps) -> + lists:foreach(fun(AppInfo) -> + AppDir = rebar_app_info:dir(AppInfo), + C = rebar_config:consult(AppDir), + S = rebar_state:new(State, C, AppDir), + + ?INFO("Cleaning out ~s...~n", [rebar_app_info:name(AppInfo)]), + %% Legacy hook support + rebar_hooks:run_compile_hooks(AppDir, pre_hooks, clean, S), + rebar_erlc_compiler:clean(State, ec_cnv:to_list(rebar_app_info:dir(AppInfo))), + rebar_hooks:run_compile_hooks(AppDir, post_hooks, clean, S) + end, Apps). + +handle_args(State) -> + {Args, _} = rebar_state:command_parsed_args(State), + All = proplists:get_value(all, Args, false), + {all, All}. |
