Current section

Files

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

lib/mix/tasks/ecto.migrate.ex

defmodule Mix.Tasks.Ecto.Migrate do
use Mix.Task
import Mix.Ecto
@shortdoc "Runs migrations up on a repo"
@moduledoc """
Runs the pending migrations for the given repository.
Migrations are expected to be found inside the migrations
directory returned by the priv function defined in the
repository.
Runs all pending migrations by default. To migrate up
to a version number, supply `--to version_number`.
To migrate up a specific number of times, use `--step n`.
## Command line options
* `--all` - run all pending migrations
* `--step` / `-n` - run n number of pending migrations
* `--to` / `-v` - run all migrations up to and including version
* `--no-start` - do not start applications
## Examples
mix ecto.migrate MyApp.Repo
mix ecto.migrate MyApp.Repo -n 3
mix ecto.migrate MyApp.Repo --step 3
mix ecto.migrate MyApp.Repo -v 20080906120000
mix ecto.migrate 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)
unless opts[:start], do: ensure_started(repo)
unless opts[:to] || opts[:step] || opts[:all] do
opts = Keyword.put(opts, :all, true)
end
migrator.(repo, migrations_path(repo), :up, opts)
end
end