From 860ffa163dfabe6076a6e213f714a60916d6ef9b Mon Sep 17 00:00:00 2001
From: Bart Jaskulski <bartek.jaskulski@wpdesk.net>
Date: Mon, 12 Dec 2022 15:13:53 +0100
Subject: [PATCH] fix: update only recent versions

Signed-off-by: Bart Jaskulski <bartek.jaskulski@wpdesk.net>
---
 src/AbstractMigrationsRepository.php |  1 +
 src/Version/WpdbMigrationFactory.php |  5 +++++
 src/WpdbMigrator.php                 | 10 ++++++++--
 3 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/AbstractMigrationsRepository.php b/src/AbstractMigrationsRepository.php
index 674d896..5f1c81b 100644
--- a/src/AbstractMigrationsRepository.php
+++ b/src/AbstractMigrationsRepository.php
@@ -41,6 +41,7 @@ abstract class AbstractMigrationsRepository implements MigrationsRepository {
 		$this->migrations[ (string) $version ] = new AvailableMigration( $version, $migration );
 	}
 
+	/** @return iterable<AvailableMigration> */
 	public function get_migrations(): iterable {
 		$this->load_migrations();
 
diff --git a/src/Version/WpdbMigrationFactory.php b/src/Version/WpdbMigrationFactory.php
index 8594e3a..91b63aa 100644
--- a/src/Version/WpdbMigrationFactory.php
+++ b/src/Version/WpdbMigrationFactory.php
@@ -19,6 +19,11 @@ class WpdbMigrationFactory implements MigrationFactory {
 		$this->logger = $logger;
 	}
 
+	/**
+	 * @param class-string<AbstractMigration> $migration_class
+	 *
+	 * @return AbstractMigration
+	 */
 	public function create_version( string $migration_class ): AbstractMigration {
 		return new $migration_class(
 			$this->wpdb,
diff --git a/src/WpdbMigrator.php b/src/WpdbMigrator.php
index f32a02d..c3166e2 100644
--- a/src/WpdbMigrator.php
+++ b/src/WpdbMigrator.php
@@ -111,16 +111,22 @@ class WpdbMigrator implements Migrator {
 		$current_version = $this->get_current_version();
 
 		foreach ( $this->migrations_repository->get_migrations() as $migration ) {
-			if ( $this->comparator->compare( $migration->get_version(), $this->get_current_version() ) ) {
+			if (
+				$this->comparator->compare(
+					$migration->get_version(),
+					$this->get_current_version()
+				) === 1
+			) {
 				$this->logger->info( sprintf( 'DB update %s:%s', $current_version, $migration->get_version() ) );
 				try {
 					$migration->get_migration()->up();
 					$this->logger->info( sprintf( 'DB update %s:%s -> ', $current_version, $migration->get_version() ) . 'OK' );
 					update_option( $this->option_name, (string) $migration->get_version(), true );
 				} catch ( \Throwable $e ) {
+					// @phpstan-ignore-next-line
 					$error_msg = sprintf( 'Error while upgrading a database: %s', $this->wpdb->last_error );
 					$this->logger->error( $error_msg );
-					trigger_error( $error_msg, E_USER_WARNING );
+					trigger_error( $error_msg, E_USER_WARNING ); // phpcs:ignore
 				}
 			}
 		}
-- 
GitLab