defmodule Mix.Tasks.EventStore.Migrations do @moduledoc """ Show the migration status of an existing EventStore database. The event stores to inspect are the ones specified under the `:event_stores` option in the current app configuration. However, if the `-e` option is given, it replaces the `:event_stores` config. ## Examples mix event_store.migrations -e MyApp.EventStore ## Command line options * `-e`, `--eventstore` - the event store to create * `--quiet` - do not log output """ use Mix.Task import Mix.EventStore alias EventStore.Tasks.Migrations @shortdoc "Display Migration status of an existing EventStore database" @switches [ eventstore: [:string, :keep], quiet: :boolean ] @aliases [e: :eventstore] @doc false def run(args) do event_stores = parse_event_store(args) {opts, _} = OptionParser.parse!(args, strict: @switches, aliases: @aliases) {:ok, _} = Application.ensure_all_started(:postgrex) {:ok, _} = Application.ensure_all_started(:ssl) migration_status = Enum.flat_map(event_stores, fn event_store -> ensure_event_store!(event_store, args) config = event_store.config() opts = opts |> Keyword.put(:is_mix, true) |> Keyword.put(:eventstore, event_store) Migrations.exec(config, opts) end) if Enum.any?(migration_status, &(&1 == :pending)) do exit({:shutdown, 1}) else Mix.Task.reenable("event_store.migrations") end end end