From 6c1e3a4e61117f492583cf3cae2bd357e3adf4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=ADlian?= <69756012+lily-mosquitoes@users.noreply.github.com> Date: Fri, 31 May 2024 01:46:14 +0300 Subject: [PATCH] fix: resolve `path` ownership problems when using `sqlx_macros_unstable` (#3236) * fix: make resolve_blocking not take ownership of path When using sqlx_macros_unstable the codepath taken further uses the path variable and it is more convenient to not take ownership but instead pass references to needed functions. * fix: change &PathBuf to &Path in resolve_blocking --- sqlx-core/src/migrate/source.rs | 6 +++--- sqlx-macros-core/src/migrate.rs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sqlx-core/src/migrate/source.rs b/sqlx-core/src/migrate/source.rs index a4727aed..660b3cfe 100644 --- a/sqlx-core/src/migrate/source.rs +++ b/sqlx-core/src/migrate/source.rs @@ -31,7 +31,7 @@ impl<'s> MigrationSource<'s> for &'s Path { Box::pin(async move { let canonical = self.canonicalize()?; let migrations_with_paths = - crate::rt::spawn_blocking(move || resolve_blocking(canonical)).await?; + crate::rt::spawn_blocking(move || resolve_blocking(&canonical)).await?; Ok(migrations_with_paths.into_iter().map(|(m, _p)| m).collect()) }) @@ -54,8 +54,8 @@ pub struct ResolveError { // FIXME: paths should just be part of `Migration` but we can't add a field backwards compatibly // since it's `#[non_exhaustive]`. -pub fn resolve_blocking(path: PathBuf) -> Result, ResolveError> { - let mut s = fs::read_dir(&path).map_err(|e| ResolveError { +pub fn resolve_blocking(path: &Path) -> Result, ResolveError> { + let mut s = fs::read_dir(path).map_err(|e| ResolveError { message: format!("error reading migration directory {}: {e}", path.display()), source: Some(e), })?; diff --git a/sqlx-macros-core/src/migrate.rs b/sqlx-macros-core/src/migrate.rs index a554dfe1..0836e6f1 100644 --- a/sqlx-macros-core/src/migrate.rs +++ b/sqlx-macros-core/src/migrate.rs @@ -103,7 +103,7 @@ pub(crate) fn expand_migrator(path: &Path) -> crate::Result { })?; // Use the same code path to resolve migrations at compile time and runtime. - let migrations = sqlx_core::migrate::resolve_blocking(path)? + let migrations = sqlx_core::migrate::resolve_blocking(&path)? .into_iter() .map(|(migration, path)| QuoteMigration { migration, path });