runMigrationConsole function

Future<int> runMigrationConsole(
  1. List<String> args,
  2. Migrator migrator, {
  3. StringSink? out,
  4. StringSink? err,
})

A tiny maat migrate-style dispatcher. Returns the process exit code: 0 on success, 1 for help or an unknown command.

void main(List<String> args) async {
  exit(await runMigrationConsole(args, Migrator(db, migrations)));
}

Implementation

Future<int> runMigrationConsole(
  List<String> args,
  Migrator migrator, {
  StringSink? out,
  StringSink? err,
}) async {
  out ??= stdout;
  err ??= stderr;
  final command = args.isEmpty ? 'help' : args.first;
  switch (command) {
    case 'migrate':
      _report(out, 'Migrated', await migrator.run(), 'Nothing to migrate.');
    case 'migrate:rollback':
      final ran = await migrator.rollback(steps: _step(args));
      _report(out, 'Rolled back', ran, 'Nothing to roll back.');
    case 'migrate:reset':
      _report(out, 'Rolled back', await migrator.reset(), 'Nothing to reset.');
    case 'migrate:refresh':
      _report(out, 'Migrated', await migrator.refresh(), 'Nothing to migrate.');
    case 'migrate:status':
      for (final s in await migrator.status()) {
        out.writeln('${s.name.padRight(50)} ${s.batch ?? 'Pending'}');
      }
    default:
      err.writeln(_usage);
      return 1;
  }
  return 0;
}