Current section

Files

Jump to
ecto lib mix tasks ecto.rollback.ex
Raw

lib/mix/tasks/ecto.rollback.ex

defmodule Mix.Tasks.Ecto.Rollback do
use Mix.Task
import Mix.Ecto
@shortdoc "Reverts migrations down on a repo"
@moduledoc """
Reverts applied migrations in the given repository.
Migrations are expected to be found inside the migrations
directory returned by the priv function defined in the
repository.
Runs the latest applied migration by default. To roll back to
to a version number, supply `--to version_number`.
To roll back a specific number of times, use `--step n`.
To undo all applied migrations, provide `--all`.
## Command line options
* `--all` - revert all applied migrations
* `--step` / `-n` - rever n number of applied migrations
* `--to` / `-v` - revert all migrations down to and including version
* `--no-start` - do not start applications
## Examples
mix ecto.rollback MyApp.Repo
mix ecto.rollback MyApp.Repo -n 3
mix ecto.rollback MyApp.Repo --step 3
mix ecto.rollback MyApp.Repo -v 20080906120000
mix ecto.rollback MyApp.Repo --to 20080906120000
"""
def run(args, migrator \\ &Ecto.Migrator.run/4) do
Mix.Task.run "app.start", args
{opts, args, _} = OptionParser.parse args,
switches: [all: :boolean, step: :integer, to: :integer, start: :boolean],
aliases: [n: :step, v: :to]
{repo, _} = parse_repo(args)
ensure_repo(repo)
if Keyword.get(opts, :start, true), do: ensure_started(repo)
unless opts[:to] || opts[:step] || opts[:all] do
opts = Keyword.put(opts, :step, 1)
end
migrator.(repo, migrations_path(repo), :down, opts)
end
end