mirror of
https://github.com/correl/rebar.git
synced 2024-11-23 19:19:54 +00:00
Adding support for overlays
This commit is contained in:
parent
be754bb6ef
commit
c3f0f2565b
1 changed files with 30 additions and 1 deletions
|
@ -29,6 +29,7 @@
|
|||
|
||||
-include("rebar.hrl").
|
||||
-include_lib("reltool/src/reltool.hrl").
|
||||
-include_lib("kernel/include/file.hrl").
|
||||
|
||||
%% ===================================================================
|
||||
%% Public API
|
||||
|
@ -144,7 +145,6 @@ run_reltool(Config, ReltoolConfig) ->
|
|||
{ok, Server} = reltool:start_server([sys_tuple(ReltoolConfig)]),
|
||||
case reltool:get_target_spec(Server) of
|
||||
{ok, Spec} ->
|
||||
dump_spec(Spec),
|
||||
TargetDir = target_dir(Config, sys_tuple(ReltoolConfig)),
|
||||
mk_target_dir(TargetDir),
|
||||
|
||||
|
@ -156,6 +156,8 @@ run_reltool(Config, ReltoolConfig) ->
|
|||
Spec
|
||||
end,
|
||||
|
||||
dump_spec(FinalSpec),
|
||||
|
||||
case reltool:eval_target_spec(FinalSpec, code:root_dir(), TargetDir) of
|
||||
ok ->
|
||||
ok;
|
||||
|
@ -197,6 +199,15 @@ dump_spec(Spec) ->
|
|||
|
||||
process_rebar_specs([], Spec) ->
|
||||
Spec;
|
||||
process_rebar_specs([{overlay, Source} | Rest], Spec) ->
|
||||
case file:list_dir(Source) of
|
||||
{ok, Files} ->
|
||||
OverlaySpec = spec_copy_overlay(Files, Source, []),
|
||||
process_rebar_specs(Rest, [OverlaySpec | Spec]);
|
||||
{error, Reason} ->
|
||||
?ERROR("Failed to list overlay directory ~p: ~p\n", [Source, Reason]),
|
||||
?FAIL
|
||||
end;
|
||||
process_rebar_specs([{empty_dirs, Dirs} | Rest], Spec) ->
|
||||
Spec2 = lists:foldl(fun(Dir, SpecAcc) ->
|
||||
spec_create_dir(filename:split(Dir), SpecAcc)
|
||||
|
@ -226,3 +237,21 @@ spec_create_dir([Path | Rest], Spec) ->
|
|||
[{create_dir, Path, spec_create_dir(Rest, [])} | Spec]
|
||||
end.
|
||||
|
||||
spec_copy_overlay([], _Dir, Acc) ->
|
||||
lists:reverse(Acc);
|
||||
spec_copy_overlay([F | Rest], Dir, Acc) ->
|
||||
Filename = filename:join(Dir, F),
|
||||
{ok, Info} = file:read_file_info(Filename),
|
||||
case Info#file_info.type of
|
||||
directory ->
|
||||
{ok, Files} = file:list_dir(Filename),
|
||||
Entry = {create_dir, filename:basename(Filename), spec_copy_overlay(Files, Filename, [])},
|
||||
spec_copy_overlay(Rest, Dir, [Entry | Acc]);
|
||||
regular ->
|
||||
Entry = {copy_file, filename:basename(F), filename:absname(Filename)},
|
||||
spec_copy_overlay(Rest, Dir, [Entry | Acc]);
|
||||
Other ->
|
||||
?DEBUG("Skipping ~p of type ~p\n", [F, Other]),
|
||||
spec_copy_overlay(Rest, Dir, Acc)
|
||||
end.
|
||||
|
||||
|
|
Loading…
Reference in a new issue