|
- # Pleroma: A lightweight social networking server
- # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
- # SPDX-License-Identifier: AGPL-3.0-onl
-
- defmodule Mix.Tasks.Pleroma.Ecto.Rollback do
- use Mix.Task
- import Mix.Pleroma
- require Logger
- @shortdoc "Wrapper on `ecto.rollback` task"
-
- @aliases [
- n: :step,
- v: :to
- ]
-
- @switches [
- all: :boolean,
- step: :integer,
- to: :integer,
- start: :boolean,
- quiet: :boolean,
- log_sql: :boolean,
- migrations_path: :string
- ]
-
- @moduledoc """
- Changes `Logger` level to `:info` before start rollback.
- Changes level back when rollback ends.
-
- ## Start rollback
-
- mix pleroma.ecto.rollback
-
- Options:
- - see https://hexdocs.pm/ecto/2.0.0/Mix.Tasks.Ecto.Rollback.html
- """
-
- @impl true
- def run(args \\ []) do
- load_pleroma()
- {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
-
- if Application.get_env(:pleroma, Pleroma.Repo)[:ssl] do
- Application.ensure_all_started(:ssl)
- end
-
- opts =
- if opts[:to] || opts[:step] || opts[:all],
- do: opts,
- else: Keyword.put(opts, :step, 1)
-
- opts =
- if opts[:quiet],
- do: Keyword.merge(opts, log: false, log_sql: false),
- else: opts
-
- path = Mix.Tasks.Pleroma.Ecto.ensure_migrations_path(Pleroma.Repo, opts)
-
- level = Logger.level()
- Logger.configure(level: :info)
-
- if Pleroma.Config.get(:env) == :test do
- Logger.info("Rollback succesfully")
- else
- {:ok, _, _} =
- Ecto.Migrator.with_repo(Pleroma.Repo, &Ecto.Migrator.run(&1, path, :down, opts))
- end
-
- Logger.configure(level: level)
- end
- end
|