@@ -82,18 +82,30 @@ def _impl(ctx):
8282 -noshell \\
8383 -eval 'io:format("Assembling {name} escript...~n", []),
8484ContentsDir = "{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),
97109ok = escript:create("{output}",
98110 [{headers}
99111 {{archive, ArchiveEntries, []}}]),
0 commit comments