# Ecto Squash

This is a Mix task intended to streamline migration squashing. It replaces
several migrations with a SQL-based migration, which applies schema, and
a second one for making sure that all of the squashed migrations has been
applied and nothing else, before migrating further.
Note: only PostgreSQL is supported yet.

## Installation

The package can be installed by adding `ecto_squash` to your list of
dependencies in `mix.exs`:

def deps do
    {:ecto_squash, "~> x.x.x", only: [:dev]}

## Examples

Squash migrations upto and including 20210601033528 into a single one:

      mix ecto.squash --to 20210601033528
      mix ecto.squash --to 20210601033528 -r Custom.Repo

The repository must be set under `:ecto_repos` in the
current app configuration or given via the `-r` option.

SQL migration will have a filename prefixed with timestamp of the latest
migration squashed. That way it won't be applied if squashed migration is
already there. Another generated migration will have a +1 second

By default, the migration will be generated to the
"priv/YOUR_REPO/migrations" directory of the current application
but it can be configured to be any subdirectory of `priv` by
specifying the `:priv` key under the repository configuration.

## Command line options

* `--to VERSION` - squash migrations upto and including VERSION
* `-y`, `--yes` - migrate to specified version, remove squashed migrations
and migrate to latest version without asking to confirm actions
* `-r REPO`, `--repo REPO` - the REPO to generate migration for
* `--migrations-path PATH` - the PATH to run the migrations from,
  defaults to `priv/repo/migrations`
* `--no-compile` - does not compile applications before running
* `--no-deps-check` - does not check dependencies before running

## Configuration

If `:ecto_sql` app configuration specifies a custom migration module,
the generated migration code will use that rather than the default

      config :ecto_sql, migration_module: MyApplication.CustomMigrationModule