mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +00:00
Adding basic distclean functionality to deps
This commit is contained in:
parent
02fa5f6f42
commit
9f83329a3c
1 changed files with 42 additions and 8 deletions
|
@ -26,26 +26,45 @@
|
||||||
|
|
||||||
-include("rebar.hrl").
|
-include("rebar.hrl").
|
||||||
|
|
||||||
-export([preprocess/2]).
|
-export([preprocess/2,
|
||||||
|
distclean/2]).
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Public API
|
%% Public API
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
|
|
||||||
preprocess(Config, _) ->
|
preprocess(Config, _) ->
|
||||||
%% Get the directory where we will place downloaded deps
|
%% Get the directory where we will place downloaded deps. Take steps
|
||||||
DepsDir = rebar_config:get(Config, deps_dir, "deps"),
|
%% to ensure that if we're doing a multi-level build, all the deps will
|
||||||
|
%% wind up in a single directory; avoiding potential pain from having
|
||||||
|
%% multiple copies of the same dep scattered throughout the source tree.
|
||||||
|
%%
|
||||||
|
%% The first definition of deps_dir is the one we use; we also fully
|
||||||
|
%% qualify it to ensure everyone sees it properly.
|
||||||
|
case rebar_config:get_all(Config, deps_dir) of
|
||||||
|
[] ->
|
||||||
|
DepsDir = filename:absname("deps");
|
||||||
|
AllDirs ->
|
||||||
|
DepsDir = filename:absname(hd(lists:reverse(AllDirs)))
|
||||||
|
end,
|
||||||
|
|
||||||
%% Process the list of deps from the configuration
|
?DEBUG("~s: Using deps dir: ~s\n", [rebar_utils:get_cwd(), DepsDir]),
|
||||||
case catch(process_deps(rebar_config:get(Config, deps, []), [], DepsDir)) of
|
Config2 = rebar_config:set(Config, deps_dir, DepsDir),
|
||||||
|
|
||||||
|
%% Process the list of local deps from the configuration
|
||||||
|
case catch(process_deps(rebar_config:get_local(Config, deps, []), [], DepsDir)) of
|
||||||
Dirs when is_list(Dirs) ->
|
Dirs when is_list(Dirs) ->
|
||||||
%% Filter out deps from config so sub-dirs don't wind up trying to d/l deps again
|
|
||||||
Config2 = rebar_config:delete(Config, deps),
|
|
||||||
{ok, Config2, Dirs};
|
{ok, Config2, Dirs};
|
||||||
{'EXIT', Reason} ->
|
{'EXIT', Reason} ->
|
||||||
?ABORT("Error while processing dependencies: ~p\n", [Reason])
|
?ABORT("Error while processing dependencies: ~p\n", [Reason])
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
distclean(Config, _) ->
|
||||||
|
%% Delete all the deps which we downloaded (or would have caused to be
|
||||||
|
%% downloaded).
|
||||||
|
DepsDir = rebar_config:get(Config, deps_dir, rebar_utils:get_cwd()),
|
||||||
|
?DEBUG("Delete deps: ~p\n", [rebar_config:get(Config, deps, [])]),
|
||||||
|
delete_deps(rebar_config:get_local(Config, deps, []), DepsDir).
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
|
@ -60,7 +79,6 @@ process_deps([{App, VsnRegex} | Rest], Acc, Dir) when is_atom(App) ->
|
||||||
require_app(App, VsnRegex),
|
require_app(App, VsnRegex),
|
||||||
process_deps(Rest, Acc, Dir);
|
process_deps(Rest, Acc, Dir);
|
||||||
process_deps([{App, VsnRegex, Source} | Rest], Acc, Dir) ->
|
process_deps([{App, VsnRegex, Source} | Rest], Acc, Dir) ->
|
||||||
?DEBUG("Process deps: ~p\n", [Rest]),
|
|
||||||
case is_app_available(App, VsnRegex) of
|
case is_app_available(App, VsnRegex) of
|
||||||
true ->
|
true ->
|
||||||
process_deps(Rest, Acc, Dir);
|
process_deps(Rest, Acc, Dir);
|
||||||
|
@ -78,6 +96,22 @@ process_deps([Other | _Rest], _Acc, _Dir) ->
|
||||||
[Other, rebar_utils:get_cwd()]).
|
[Other, rebar_utils:get_cwd()]).
|
||||||
|
|
||||||
|
|
||||||
|
delete_deps([], _DepsDir) ->
|
||||||
|
ok;
|
||||||
|
delete_deps([{App, _VsnRegex, _Source} | Rest], DepsDir) ->
|
||||||
|
AppDir = filename:join(DepsDir, App),
|
||||||
|
case filelib:is_dir(AppDir) of
|
||||||
|
true ->
|
||||||
|
?INFO("Delete dependency dir ~s\n", [AppDir]),
|
||||||
|
rebar_file_utils:rm_rf(AppDir);
|
||||||
|
false ->
|
||||||
|
ok
|
||||||
|
end,
|
||||||
|
delete_deps(Rest, DepsDir);
|
||||||
|
delete_deps([_Other | Rest], DepsDir) ->
|
||||||
|
delete_deps(Rest, DepsDir).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
require_app(App, VsnRegex) ->
|
require_app(App, VsnRegex) ->
|
||||||
case is_app_available(App, VsnRegex) of
|
case is_app_available(App, VsnRegex) of
|
||||||
|
|
Loading…
Reference in a new issue