Skip to content

Commit 141b99e

Browse files
committed
Error when files would be dropped when building an escript_archive
This can occur when using the 'flat' option
1 parent 09abcb0 commit 141b99e

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

private/escript_archive.bzl

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,30 @@ def _impl(ctx):
8282
-noshell \\
8383
-eval 'io:format("Assembling {name} escript...~n", []),
8484
ContentsDir = "{contents_dir}",
85-
ArchiveEntries = filelib:fold_files(
85+
Entries = filelib:fold_files(
8686
ContentsDir, "", true,
8787
fun(Path, Entries) ->
8888
{{ok, Bin}} = file:read_file(Path),
89+
Rel = string:prefix(Path, ContentsDir ++ "/"),
8990
Dest = case {flat} of
90-
true ->
91-
filename:basename(Path);
92-
false ->
93-
string:prefix(Path, ContentsDir ++ "/")
91+
true ->
92+
filename:basename(Path);
93+
false ->
94+
Rel
9495
end,
95-
[{{Dest, Bin}} | Entries]
96+
[{{Dest, Rel, Bin}} | Entries]
9697
end, []),
98+
UniqueEntries = lists:foldr(
99+
fun ({{Dest, Rel, Bin}}, Acc) ->
100+
case Acc of
101+
#{{Dest := _}} ->
102+
io:format(" dropping ~s (conflicting entry at ~s)~n", [Rel, Dest]),
103+
halt(1);
104+
_ ->
105+
Acc#{{Dest => Bin}}
106+
end
107+
end, #{{}}, Entries),
108+
ArchiveEntries = maps:to_list(UniqueEntries),
97109
ok = escript:create("{output}",
98110
[{headers}
99111
{{archive, ArchiveEntries, []}}]),

0 commit comments

Comments
 (0)