listVersions method

  1. @override
Future<List<String>> listVersions()
override

Lists all available migration versions in ascending order.

Implementation

@override
Future<List<String>> listVersions() async {
  var migrationsDirectory = MigrationConstants.migrationsBaseDirectory(
    _projectDirectory,
  );

  if (!await migrationsDirectory.exists()) {
    return [];
  }

  var versions =
      await migrationsDirectory
            .list()
            .where((entity) => entity is Directory)
            .cast<Directory>()
            .map((directory) => path.basename(directory.path))
            .toList()
        ..sort();

  var removed = await deleteTrailingEmptyMigrationVersionDirectories(
    versions,
    migrationsBaseDirectory: migrationsDirectory,
    logWarning: log.warning,
  );

  // Only an existing registry is refreshed, to drop the removed versions.
  // Since writeVersionRegistry creates the file when missing, writing it
  // unconditionally would turn listing the versions into generating a
  // registry for projects that have none.
  if (removed.isNotEmpty && await _registryFile.exists()) {
    await writeVersionRegistry(versions);
  }

  return versions;
}