/*
 * Copyright © Red Gate Software Ltd 2010-2020
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.flywaydb.core.internal.resolver;

import org.flywaydb.core.api.FlywayException;
import org.flywaydb.core.api.MigrationVersion;
import org.flywaydb.core.internal.util.Pair;
import org.flywaydb.core.internal.util.StringUtils;

Parsing support for migrations that use the standard Flyway version + description embedding in their name. These migrations have names like 1_2__Description .
/** * Parsing support for migrations that use the standard Flyway version + description embedding in their name. These * migrations have names like 1_2__Description . */
public class MigrationInfoHelper {
Prevents instantiation.
/** * Prevents instantiation. */
private MigrationInfoHelper() { //Do nothing. }
Extracts the schema version and the description from a migration name formatted as 1_2__Description.
Params:
  • migrationName – The migration name to parse. Should not contain any folders or packages.
  • prefix – The migration prefix.
  • separator – The migration separator.
  • suffixes – The migration suffixes.
  • repeatable – Whether this is a repeatable migration.
Throws:
  • FlywayException – if the migration name does not follow the standard conventions.
Returns:The extracted schema version.
/** * Extracts the schema version and the description from a migration name formatted as 1_2__Description. * * @param migrationName The migration name to parse. Should not contain any folders or packages. * @param prefix The migration prefix. * @param separator The migration separator. * @param suffixes The migration suffixes. * @param repeatable Whether this is a repeatable migration. * @return The extracted schema version. * @throws FlywayException if the migration name does not follow the standard conventions. */
public static Pair<MigrationVersion, String> extractVersionAndDescription(String migrationName, String prefix, String separator, String[] suffixes, boolean repeatable) { // Only handles Java migrations now String cleanMigrationName = cleanMigrationName(migrationName, prefix, suffixes); int separatorPos = cleanMigrationName.indexOf(separator); String version; String description; if (separatorPos < 0) { version = cleanMigrationName; description = ""; } else { version = cleanMigrationName.substring(0, separatorPos); description = cleanMigrationName.substring(separatorPos + separator.length()).replace("_", " "); } if (StringUtils.hasText(version)) { if (repeatable) { throw new FlywayException("Wrong repeatable migration name format: " + migrationName + " (It cannot contain a version and should look like this: " + prefix + separator + description + suffixes[0] + ")"); } try { return Pair.of(MigrationVersion.fromVersion(version), description); } catch (Exception e) { throw new FlywayException("Wrong versioned migration name format: " + migrationName + " (could not recognise version number " + version + ")", e); } } if (!repeatable) { throw new FlywayException("Wrong versioned migration name format: " + migrationName + " (It must contain a version and should look like this: " + prefix + "1.2" + separator + description + suffixes[0] + ")"); } return Pair.of(null, description); } private static String cleanMigrationName(String migrationName, String prefix, String[] suffixes) { for (String suffix : suffixes) { if (migrationName.endsWith(suffix)) { return migrationName.substring( StringUtils.hasLength(prefix) ? prefix.length() : 0, migrationName.length() - suffix.length()); } } return migrationName; } }