writeMigration function
Future<String>
writeMigration(
- Migration migration, {
- required String directory,
- required MigrationHistory history,
Saves a new fixed migration and updates the registry. Never replaces a file.
Implementation
Future<String> writeMigration(
Migration migration, {
required String directory,
required MigrationHistory history,
}) async {
final previous = history.checked;
final all = [...previous, migration];
validateMigrations(all, dialect: history.dialect);
await _registryDialect(directory, history.dialect);
final root = Directory(directory);
await root.create(recursive: true);
await _checkMigrationFiles(root, previous);
final source = formatMigration(migrationSource(migration));
final registry = formatMigration(
migrationHistorySource(all.map((m) => m.id), dialect: history.dialect),
);
final file = File(p.join(directory, 'm${migration.id}.dart'));
if (await FileSystemEntity.type(file.path, followLinks: false) !=
FileSystemEntityType.notFound) {
throw GenerationException('Migration already exists: ${file.path}');
}
await file.create(exclusive: true);
try {
await file.writeAsString(source, flush: true);
await _replaceSource(p.join(directory, 'migrations.g.dart'), registry);
} catch (_) {
await file.delete();
rethrow;
}
return file.path;
}