summaryrefslogtreecommitdiff
path: root/lib/sasl
diff options
context:
space:
mode:
authorTristan Sloughter <t@crashfast.com>2019-10-16 08:57:12 -0600
committerTristan Sloughter <t@crashfast.com>2020-02-07 10:56:57 -0700
commitf89c871e19ad0c02c3d37fc9480b20378c427b6a (patch)
tree082dcc234273f498bfa338739e7388242feef518 /lib/sasl
parent48ddbe2448bc25168625e77f77de93e0b68ceff7 (diff)
downloaderlang-f89c871e19ad0c02c3d37fc9480b20378c427b6a.tar.gz
make_tar: support including arbitrary files and directories
Diffstat (limited to 'lib/sasl')
-rw-r--r--lib/sasl/src/systools_make.erl13
-rw-r--r--lib/sasl/test/systools_SUITE.erl58
2 files changed, 61 insertions, 10 deletions
diff --git a/lib/sasl/src/systools_make.erl b/lib/sasl/src/systools_make.erl
index 85531f22ef..5a4e4b84c1 100644
--- a/lib/sasl/src/systools_make.erl
+++ b/lib/sasl/src/systools_make.erl
@@ -1676,8 +1676,17 @@ mk_tar(Tar, RelName, Release, Appls, Flags, Path1) ->
add_applications(Appls, Tar, Variables, Flags, false),
add_variable_tars(Variables, Appls, Tar, Flags),
add_system_files(Tar, RelName, Release, Path1),
- add_erts_bin(Tar, Release, Flags).
-
+ add_erts_bin(Tar, Release, Flags),
+ add_additional_files(Tar, Flags).
+
+add_additional_files(Tar, Flags) ->
+ case get_flag(extra_files, Flags) of
+ {extra_files, ToAdd} ->
+ [add_to_tar(Tar, From, To) || {From, To} <- ToAdd];
+ _ ->
+ ok
+ end.
+
add_applications(Appls, Tar, Variables, Flags, Var) ->
Res = foldl(fun({{Name,Vsn},App}, Errs) ->
case catch add_appl(to_list(Name), Vsn, App,
diff --git a/lib/sasl/test/systools_SUITE.erl b/lib/sasl/test/systools_SUITE.erl
index 72f881c9e5..4e89fbb42a 100644
--- a/lib/sasl/test/systools_SUITE.erl
+++ b/lib/sasl/test/systools_SUITE.erl
@@ -57,7 +57,7 @@ all() ->
groups() ->
[{script, [],
- [script_options, normal_script, unicode_script, no_mod_vsn_script,
+ [script_options, normal_script, start_script, unicode_script, no_mod_vsn_script,
wildcard_script, variable_script, abnormal_script,
no_sasl_script, no_dot_erlang_script,
src_tests_script, crazy_script,
@@ -66,10 +66,10 @@ groups() ->
duplicate_modules_script,
otp_3065_circular_dependenies, included_and_used_sort_script]},
{tar, [],
- [tar_options, normal_tar, no_mod_vsn_tar, system_files_tar,
+ [tar_options, relname_tar, normal_tar, no_mod_vsn_tar, system_files_tar,
system_src_file_tar, invalid_system_files_tar, variable_tar,
src_tests_tar, var_tar, exref_tar, link_tar, no_sasl_tar,
- otp_9507_path_ebin]},
+ otp_9507_path_ebin, additional_files_tar]},
{relup, [],
[normal_relup, restart_relup, abnormal_relup, no_sasl_relup,
no_appup_relup, bad_appup_relup, app_start_type_relup, regexp_relup
@@ -252,7 +252,7 @@ start_script(Config) when is_list(Config) ->
ok = file:set_cwd(LatestDir),
- ok = systools:make_script(filename:basename(LatestName), [{script_name, start}]),
+ ok = systools:make_script(filename:basename(LatestName), [{script_name, "start"}]),
{ok, _} = read_script_file("start"), % Check readabillity
ok = file:set_cwd(OldDir),
@@ -892,7 +892,7 @@ tar_options(Config) when is_list(Config) ->
ok.
-%% make_tar: Check normal case
+%% make_tar: Check case of start.boot
normal_tar(Config) when is_list(Config) ->
{ok, OldDir} = file:get_cwd(),
@@ -905,7 +905,7 @@ normal_tar(Config) when is_list(Config) ->
ok = file:set_cwd(LatestDir),
- {ok, _, []} = systools:make_script(LatestName, [silent, {path, P}]),
+ {ok, _, []} = systools:make_script(LatestName, [silent, {path, P}, {script_name, "start"}]),
ok = systools:make_tar(LatestName, [{path, P}]),
ok = check_tar(fname([lib,'db-2.1',ebin,'db.app']), LatestName),
{ok, _, []} = systools:make_tar(LatestName, [{path, P}, silent]),
@@ -914,8 +914,8 @@ normal_tar(Config) when is_list(Config) ->
ok = file:set_cwd(OldDir),
ok.
-%% make_tar: Check legacy case of relname.boot
-legacy_tar(Config) when is_list(Config) ->
+%% make_tar: Check case of relname.boot
+relname_tar(Config) when is_list(Config) ->
{ok, OldDir} = file:get_cwd(),
{LatestDir, LatestName} = create_script(latest,Config),
@@ -990,6 +990,48 @@ system_files_tar(Config) ->
ok.
+%% make_tar: Check that extra_files are included in the tarball
+additional_files_tar(Config) ->
+ {ok, OldDir} = file:get_cwd(),
+
+ {LatestDir, LatestName} = create_script(latest,Config),
+
+ DataDir = filename:absname(?copydir),
+ LibDir = fname([DataDir, d_normal, lib]),
+ P = [fname([LibDir, 'db-2.1', ebin]),
+ fname([LibDir, 'fe-3.1', ebin])],
+
+ ok = file:set_cwd(LatestDir),
+
+ %% Add dummy relup and sys.config
+ ok = file:write_file("sys.config","[].\n"),
+ ok = file:write_file("relup","{\"LATEST\",[],[]}.\n"),
+
+ %% unrelated files that must be included explicitly
+ RandomFile = "somefile",
+ ok = file:write_file(RandomFile,"hello\n"),
+
+ {ok, _, []} = systools:make_script(LatestName, [silent, {path, P}]),
+ ok = systools:make_tar(LatestName, [{path, P}]),
+ ok = check_tar(fname(["releases","LATEST","sys.config"]), LatestName),
+ ok = check_tar(fname(["releases","LATEST","relup"]), LatestName),
+ %% random file should not be in this tarball
+ {error, _} = check_tar(fname(["releases","LATEST",RandomFile]), LatestName),
+
+ RandomFilePathInTar = filename:join("releases", "LATEST", RandomFile),
+ {ok, _, []} = systools:make_tar(LatestName,
+ [{path, P}, silent,
+ {extra_files, [{RandomFile, RandomFilePathInTar}]}]),
+ ok = check_tar(fname(["releases","LATEST","sys.config"]), LatestName),
+ ok = check_tar(fname(["releases","LATEST","relup"]), LatestName),
+
+ %% random file should be in this tarball
+ ok = check_tar(fname(["releases","LATEST",RandomFile]), LatestName),
+
+ ok = file:set_cwd(OldDir),
+
+ ok.
+
system_files_tar(cleanup,Config) ->
Dir = ?privdir,