diff --git a/CHANGELOG.md b/CHANGELOG.md index 9ee5197b6..c0f382aac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,4 +8,4 @@ All notable Modrinth Plus changes are documented here. - Added Gitea Actions verification for the Modrinth Plus fork. - Added Windows installer publishing to the Gitea generic package registry. - Added Codex repository context and release/security documentation. -- Fixed startup compatibility with existing official Modrinth App databases that recorded a different checksum for the historical initial SQLite migration. +- Fixed startup compatibility with existing official Modrinth App databases that recorded different checksums for historical SQLite migrations. diff --git a/packages/app-lib/src/state/db.rs b/packages/app-lib/src/state/db.rs index 7283f96bf..3fc61cb63 100644 --- a/packages/app-lib/src/state/db.rs +++ b/packages/app-lib/src/state/db.rs @@ -7,7 +7,7 @@ use std::str::FromStr; use std::time::Duration; static MIGRATOR: sqlx::migrate::Migrator = sqlx::migrate!(); -const HISTORICAL_INIT_MIGRATION_VERSION: i64 = 20240711194701; +const FIRST_MODRINTH_PLUS_MIGRATION_VERSION: i64 = 20260503003000; pub(crate) async fn connect( app_identifier: &str, @@ -49,13 +49,6 @@ pub(crate) async fn connect( async fn reconcile_historical_migration_checksums( pool: &Pool, ) -> crate::Result<()> { - let Some(init_migration) = MIGRATOR.iter().find(|migration| { - migration.version == HISTORICAL_INIT_MIGRATION_VERSION - }) - else { - return Ok(()); - }; - let has_migration_table: i64 = sqlx::query_scalar( "SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = '_sqlx_migrations'", ) @@ -66,29 +59,33 @@ async fn reconcile_historical_migration_checksums( return Ok(()); } - let stored_checksum: Option> = sqlx::query_scalar( - "SELECT checksum FROM _sqlx_migrations WHERE version = ? AND success = TRUE", - ) - .bind(HISTORICAL_INIT_MIGRATION_VERSION) - .fetch_optional(pool) - .await?; + for migration in MIGRATOR.iter().filter(|migration| { + migration.version < FIRST_MODRINTH_PLUS_MIGRATION_VERSION + }) { + let stored_checksum: Option> = sqlx::query_scalar( + "SELECT checksum FROM _sqlx_migrations WHERE version = ? AND success = TRUE", + ) + .bind(migration.version) + .fetch_optional(pool) + .await?; - if let Some(stored_checksum) = stored_checksum { - let bundled_checksum: &[u8] = init_migration.checksum.as_ref(); + if let Some(stored_checksum) = stored_checksum { + let bundled_checksum: &[u8] = migration.checksum.as_ref(); - if stored_checksum.as_slice() != bundled_checksum { - tracing::warn!( - "Reconciling checksum for historical Modrinth init migration {}", - HISTORICAL_INIT_MIGRATION_VERSION - ); + if stored_checksum.as_slice() != bundled_checksum { + tracing::warn!( + "Reconciling checksum for historical Modrinth migration {}", + migration.version + ); - sqlx::query( - "UPDATE _sqlx_migrations SET checksum = ? WHERE version = ? AND success = TRUE", - ) - .bind(bundled_checksum) - .bind(HISTORICAL_INIT_MIGRATION_VERSION) - .execute(pool) - .await?; + sqlx::query( + "UPDATE _sqlx_migrations SET checksum = ? WHERE version = ? AND success = TRUE", + ) + .bind(bundled_checksum) + .bind(migration.version) + .execute(pool) + .await?; + } } }