# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Utils do
eperm epipe erange erofs espipe esrch estale etxtbsy exdev
)a
+ @repo_timeout Pleroma.Config.get([Pleroma.Repo, :timeout], 15_000)
+
def compile_dir(dir) when is_binary(dir) do
+ dir
+ |> elixir_files()
+ |> Kernel.ParallelCompiler.compile()
+ end
+
+ defp elixir_files(dir) when is_binary(dir) do
dir
|> File.ls!()
|> Enum.map(&Path.join(dir, &1))
- |> Kernel.ParallelCompiler.compile()
+ |> Enum.flat_map(fn path ->
+ if File.dir?(path) do
+ elixir_files(path)
+ else
+ [path]
+ end
+ end)
+ |> Enum.filter(fn path -> String.ends_with?(path, ".ex") end)
end
@doc """
end
def posix_error_message(_), do: ""
+
+ @doc """
+ Returns [timeout: integer] suitable for passing as an option to Repo functions.
+
+ This function detects if the execution was triggered from IEx shell, Mix task, or
+ ./bin/pleroma_ctl and sets the timeout to :infinity, else returns the default timeout value.
+ """
+ @spec query_timeout() :: [timeout: integer]
+ def query_timeout do
+ {parent, _, _, _} = Process.info(self(), :current_stacktrace) |> elem(1) |> Enum.fetch!(2)
+
+ cond do
+ parent |> to_string |> String.starts_with?("Elixir.Mix.Task") -> [timeout: :infinity]
+ parent == :erl_eval -> [timeout: :infinity]
+ true -> [timeout: @repo_timeout]
+ end
+ end
end