File 0802-make_tar-support-including-arbitrary-files-and-direc.patch of Package erlang

From f89c871e19ad0c02c3d37fc9480b20378c427b6a Mon Sep 17 00:00:00 2001
From: Tristan Sloughter <t@crashfast.com>
Date: Wed, 16 Oct 2019 08:57:12 -0600
Subject: [PATCH 2/5] make_tar: support including arbitrary files and
 directories

---
 lib/sasl/src/systools_make.erl   | 13 +++++++--
 lib/sasl/test/systools_SUITE.erl | 58 ++++++++++++++++++++++++++++++++++------
 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,
-- 
2.16.4

openSUSE Build Service is sponsored by