logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

rollback.ex (1667B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Mix.Tasks.Pleroma.Ecto.Rollback do
  5. use Mix.Task
  6. import Mix.Pleroma
  7. require Logger
  8. @shortdoc "Wrapper on `ecto.rollback` task"
  9. @aliases [
  10. n: :step,
  11. v: :to
  12. ]
  13. @switches [
  14. all: :boolean,
  15. step: :integer,
  16. to: :integer,
  17. start: :boolean,
  18. quiet: :boolean,
  19. log_sql: :boolean,
  20. migrations_path: :string,
  21. env: :string
  22. ]
  23. @moduledoc """
  24. Changes `Logger` level to `:info` before start rollback.
  25. Changes level back when rollback ends.
  26. ## Start rollback
  27. mix pleroma.ecto.rollback
  28. Options:
  29. - see https://hexdocs.pm/ecto/2.0.0/Mix.Tasks.Ecto.Rollback.html
  30. """
  31. @impl true
  32. def run(args \\ []) do
  33. load_pleroma()
  34. {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases)
  35. if Application.get_env(:pleroma, Pleroma.Repo)[:ssl] do
  36. Application.ensure_all_started(:ssl)
  37. end
  38. opts =
  39. if opts[:to] || opts[:step] || opts[:all],
  40. do: opts,
  41. else: Keyword.put(opts, :step, 1)
  42. opts =
  43. if opts[:quiet],
  44. do: Keyword.merge(opts, log: false, log_sql: false),
  45. else: opts
  46. path = Mix.Tasks.Pleroma.Ecto.ensure_migrations_path(Pleroma.Repo, opts)
  47. level = Logger.level()
  48. Logger.configure(level: :info)
  49. if opts[:env] == "test" do
  50. Logger.info("Rollback successfully")
  51. else
  52. {:ok, _, _} =
  53. Ecto.Migrator.with_repo(Pleroma.Repo, &Ecto.Migrator.run(&1, path, :down, opts))
  54. end
  55. Logger.configure(level: level)
  56. end
  57. end