diff --git a/lib/ex_doc/formatter/html.ex b/lib/ex_doc/formatter/html.ex index 44acccb1a..2afe6e0fe 100644 --- a/lib/ex_doc/formatter/html.ex +++ b/lib/ex_doc/formatter/html.ex @@ -45,7 +45,7 @@ defmodule ExDoc.Formatter.HTML do generate_list(nodes_map.tasks, config) ++ generate_redirects(config, ".html") - generate_build(Enum.sort(all_files), build) + generate_build(all_files, build) config.output |> Path.join("index.html") |> Path.relative_to_cwd() end @@ -157,7 +157,12 @@ defmodule ExDoc.Formatter.HTML do end defp generate_build(files, build) do - entries = Enum.map(files, &[&1, "\n"]) + entries = + files + |> Enum.uniq() + |> Enum.sort() + |> Enum.map(&[&1, "\n"]) + File.write!(build, entries) end @@ -281,7 +286,15 @@ defmodule ExDoc.Formatter.HTML do is_binary(dir_or_files) and File.dir?(dir_or_files) -> dir_or_files |> File.cp_r!(target_dir, dereference_symlinks: true) - |> Enum.map(&Path.relative_to(&1, output)) + |> Enum.reduce([], fn path, acc -> + # Omit directories in .build file + if File.dir?(path) do + acc + else + [Path.relative_to(path, output) | acc] + end + end) + |> Enum.reverse() is_binary(dir_or_files) -> []