mirror of
https://github.com/correl/rebar.git
synced 2024-11-27 11:09:55 +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("rebar.hrl").
|
||||||
-include_lib("reltool/src/reltool.hrl").
|
-include_lib("reltool/src/reltool.hrl").
|
||||||
|
-include_lib("kernel/include/file.hrl").
|
||||||
|
|
||||||
%% ===================================================================
|
%% ===================================================================
|
||||||
%% Public API
|
%% Public API
|
||||||
|
@ -144,7 +145,6 @@ run_reltool(Config, ReltoolConfig) ->
|
||||||
{ok, Server} = reltool:start_server([sys_tuple(ReltoolConfig)]),
|
{ok, Server} = reltool:start_server([sys_tuple(ReltoolConfig)]),
|
||||||
case reltool:get_target_spec(Server) of
|
case reltool:get_target_spec(Server) of
|
||||||
{ok, Spec} ->
|
{ok, Spec} ->
|
||||||
dump_spec(Spec),
|
|
||||||
TargetDir = target_dir(Config, sys_tuple(ReltoolConfig)),
|
TargetDir = target_dir(Config, sys_tuple(ReltoolConfig)),
|
||||||
mk_target_dir(TargetDir),
|
mk_target_dir(TargetDir),
|
||||||
|
|
||||||
|
@ -156,6 +156,8 @@ run_reltool(Config, ReltoolConfig) ->
|
||||||
Spec
|
Spec
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
dump_spec(FinalSpec),
|
||||||
|
|
||||||
case reltool:eval_target_spec(FinalSpec, code:root_dir(), TargetDir) of
|
case reltool:eval_target_spec(FinalSpec, code:root_dir(), TargetDir) of
|
||||||
ok ->
|
ok ->
|
||||||
ok;
|
ok;
|
||||||
|
@ -197,6 +199,15 @@ dump_spec(Spec) ->
|
||||||
|
|
||||||
process_rebar_specs([], Spec) ->
|
process_rebar_specs([], Spec) ->
|
||||||
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) ->
|
process_rebar_specs([{empty_dirs, Dirs} | Rest], Spec) ->
|
||||||
Spec2 = lists:foldl(fun(Dir, SpecAcc) ->
|
Spec2 = lists:foldl(fun(Dir, SpecAcc) ->
|
||||||
spec_create_dir(filename:split(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]
|
[{create_dir, Path, spec_create_dir(Rest, [])} | Spec]
|
||||||
end.
|
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