   end
 
   defp path_separator do
-    case :os.type do
+    case :os.type() do
       {:win32, _} -> ";"
-      {:unix, _}  -> ":"
+      {:unix, _} -> ":"
     end
   end
 

  defp depth(_pretty?, []), do: ""
  defp depth(pretty?, depth), do: Enum.reverse(depth) |> tl |> Enum.map(&entry(pretty?, &1))

  defp entry(false, true),  do: "|   "
  defp entry(false, false), do: "    "
  defp entry(true, true),   do: "│   "
  defp entry(true, false),  do: "    "

  defp prefix(false, [], _), do: ""
  defp prefix(false, _, []), do: "`-- "
  defp prefix(false, _, _),  do: "|-- "
  defp prefix(true, [], _),  do: ""
  defp prefix(true, _, []),  do: "└── "
  defp prefix(true, _, _),   do: "├── "

  @doc """
  Outputs the given tree according to the callback as a DOT graph.

  def symlink_or_copy(source, target) do
    if File.exists?(source) do
      # Relative symbolic links on Windows are broken
      link =
        case :os.type() do
          {:win32, _} -> source
          _ -> make_relative_path(source, target)
        end
        |> String.to_charlist()

      case :file.read_link(target) do
        {:ok, ^link} ->
          :ok

        {:ok, _} ->
          File.rm!(target)
          do_symlink_or_copy(source, target, link)

        {:error, :enoent} ->
          do_symlink_or_copy(source, target, link)

        {:error, _} ->
          unless File.dir?(target) do
            File.rm_rf!(target)
          end

          do_symlink_or_copy(source, target, link)
      end
    else
