-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
ecto.migrate.ex
61 lines (44 loc) · 1.67 KB
/
ecto.migrate.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
defmodule Mix.Tasks.Ecto.Migrate do
use Mix.Task
import Mix.Ecto
@shortdoc "Run migrations up on a repo"
@moduledoc """
Runs the pending migrations for the given repository.
By default, migrations are expected at "priv/YOUR_REPO/migrations"
directory of the current application but it can be configured
by specify the `:priv` key under the repository configuration.
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`.
## Examples
mix ecto.migrate
mix ecto.migrate -r Custom.Repo
mix ecto.migrate -n 3
mix ecto.migrate --step 3
mix ecto.migrate -v 20080906120000
mix ecto.migrate --to 20080906120000
## Command line options
* `-r`, `--repo` - the repo to migrate (defaults to `YourApp.Repo`)
* `--all` - run all pending migrations
* `--step` / `-n` - run n number of pending migrations
* `--to` / `-v` - run all migrations up to and including version
"""
@doc false
def run(args, migrator \\ &Ecto.Migrator.run/4) do
Mix.Task.run "app.start", ["--no-start"|args]
{:ok, _} = Application.ensure_all_started(:ecto)
repo = parse_repo(args)
{opts, _, _} = OptionParser.parse args,
switches: [all: :boolean, step: :integer, to: :integer, quiet: :boolean],
aliases: [n: :step, v: :to]
ensure_repo(repo)
ensure_started(repo)
unless opts[:to] || opts[:step] || opts[:all] do
opts = Keyword.put(opts, :all, true)
end
if opts[:quiet] do
opts = Keyword.put(opts, :log, false)
end
migrator.(repo, migrations_path(repo), :up, opts)
end
end