ecto.ex 1.54 KB
Newer Older
Alexander Strizhakov's avatar
Alexander Strizhakov committed
1
# Pleroma: A lightweight social networking server
feld's avatar
feld committed
2
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
Alexander Strizhakov's avatar
Alexander Strizhakov committed
3
# SPDX-License-Identifier: AGPL-3.0-onl
Alexander Strizhakov's avatar
Alexander Strizhakov committed
4

Alexander Strizhakov's avatar
Alexander Strizhakov committed
5
6
7
8
9
10
11
12
defmodule Mix.Tasks.Pleroma.Ecto do
  @doc """
  Ensures the given repository's migrations path exists on the file system.
  """
  @spec ensure_migrations_path(Ecto.Repo.t(), Keyword.t()) :: String.t()
  def ensure_migrations_path(repo, opts) do
    path = opts[:migrations_path] || Path.join(source_repo_priv(repo), "migrations")

13
14
15
16
17
18
19
20
21
    path =
      case Path.type(path) do
        :relative ->
          Path.join(Application.app_dir(:pleroma), path)

        :absolute ->
          path
      end

Alexander Strizhakov's avatar
Alexander Strizhakov committed
22
23
24
25
26
27
28
29
30
31
32
33
34
    if not File.dir?(path) do
      raise_missing_migrations(Path.relative_to_cwd(path), repo)
    end

    path
  end

  @doc """
  Returns the private repository path relative to the source.
  """
  def source_repo_priv(repo) do
    config = repo.config()
    priv = config[:priv] || "priv/#{repo |> Module.split() |> List.last() |> Macro.underscore()}"
35
    Path.join(Application.app_dir(:pleroma), priv)
Alexander Strizhakov's avatar
Alexander Strizhakov committed
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  end

  defp raise_missing_migrations(path, repo) do
    raise("""
    Could not find migrations directory #{inspect(path)}
    for repo #{inspect(repo)}.
    This may be because you are in a new project and the
    migration directory has not been created yet. Creating an
    empty directory at the path above will fix this error.
    If you expected existing migrations to be found, please
    make sure your repository has been properly configured
    and the configured path exists.
    """)
  end
end