From abcf07c8c5188400adaa75a60712ce97a78ee9ef Mon Sep 17 00:00:00 2001 From: Micha Reiser Date: Wed, 10 Jul 2024 14:15:14 +0200 Subject: [PATCH] Change `File::touch_path` to only take a `SystemPath` (#12273) --- crates/red_knot/src/program/mod.rs | 4 +- .../red_knot_module_resolver/src/resolver.rs | 2 +- crates/ruff_db/src/files.rs | 43 ++++++++++--------- crates/ruff_db/src/system/test.rs | 8 ++-- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/crates/red_knot/src/program/mod.rs b/crates/red_knot/src/program/mod.rs index 99daa53f27..10703fa45d 100644 --- a/crates/red_knot/src/program/mod.rs +++ b/crates/red_knot/src/program/mod.rs @@ -5,7 +5,7 @@ use salsa::{Cancelled, Database}; use red_knot_module_resolver::{vendored_typeshed_stubs, Db as ResolverDb, Jar as ResolverJar}; use red_knot_python_semantic::{Db as SemanticDb, Jar as SemanticJar}; -use ruff_db::files::{File, FilePath, Files}; +use ruff_db::files::{File, Files}; use ruff_db::system::{System, SystemPathBuf}; use ruff_db::vendored::VendoredFileSystem; use ruff_db::{Db as SourceDb, Jar as SourceJar, Upcast}; @@ -41,7 +41,7 @@ impl Program { I: IntoIterator, { for change in changes { - File::touch_path(self, &FilePath::system(change.path)); + File::touch_path(self, &change.path); } } diff --git a/crates/red_knot_module_resolver/src/resolver.rs b/crates/red_knot_module_resolver/src/resolver.rs index bfdec08d88..2e6916f1b6 100644 --- a/crates/red_knot_module_resolver/src/resolver.rs +++ b/crates/red_knot_module_resolver/src/resolver.rs @@ -1002,7 +1002,7 @@ mod tests { db.memory_file_system().remove_file(&foo_init_path)?; db.memory_file_system() .remove_directory(foo_init_path.parent().unwrap())?; - File::touch_path(&mut db, &FilePath::System(foo_init_path)); + File::touch_path(&mut db, &foo_init_path); let foo_module = resolve_module(&db, foo_module_name).expect("Foo module to resolve"); assert_eq!(&src.join("foo.py"), foo_module.file().path(&db)); diff --git a/crates/ruff_db/src/files.rs b/crates/ruff_db/src/files.rs index 1650facdec..318909354e 100644 --- a/crates/ruff_db/src/files.rs +++ b/crates/ruff_db/src/files.rs @@ -206,40 +206,41 @@ impl File { /// Refreshes the file metadata by querying the file system if needed. /// TODO: The API should instead take all observed changes from the file system directly /// and then apply the VfsFile status accordingly. But for now, this is sufficient. - pub fn touch_path(db: &mut dyn Db, path: &FilePath) { + pub fn touch_path(db: &mut dyn Db, path: &SystemPath) { Self::touch_impl(db, path, None); } pub fn touch(self, db: &mut dyn Db) { let path = self.path(db).clone(); - Self::touch_impl(db, &path, Some(self)); - } - /// Private method providing the implementation for [`Self::touch_path`] and [`Self::touch`]. - fn touch_impl(db: &mut dyn Db, path: &FilePath, file: Option) { match path { - FilePath::System(path) => { - let metadata = db.system().path_metadata(path); - - let (status, revision) = match metadata { - Ok(metadata) if metadata.file_type().is_file() => { - (FileStatus::Exists, metadata.revision()) - } - _ => (FileStatus::Deleted, FileRevision::zero()), - }; - - let Some(file) = file.or_else(|| db.files().try_system(db, path)) else { - return; - }; - - file.set_status(db).to(status); - file.set_revision(db).to(revision); + FilePath::System(system) => { + Self::touch_impl(db, &system, Some(self)); } FilePath::Vendored(_) => { // Readonly, can never be out of date. } } } + + /// Private method providing the implementation for [`Self::touch_path`] and [`Self::touch`]. + fn touch_impl(db: &mut dyn Db, path: &SystemPath, file: Option) { + let metadata = db.system().path_metadata(path); + + let (status, revision) = match metadata { + Ok(metadata) if metadata.file_type().is_file() => { + (FileStatus::Exists, metadata.revision()) + } + _ => (FileStatus::Deleted, FileRevision::zero()), + }; + + let Some(file) = file.or_else(|| db.files().try_system(db, path)) else { + return; + }; + + file.set_status(db).to(status); + file.set_revision(db).to(revision); + } } // The types in here need to be public because they're salsa ingredients but we diff --git a/crates/ruff_db/src/system/test.rs b/crates/ruff_db/src/system/test.rs index 2e23b77a84..f8a9267b57 100644 --- a/crates/ruff_db/src/system/test.rs +++ b/crates/ruff_db/src/system/test.rs @@ -1,4 +1,4 @@ -use crate::files::{File, FilePath}; +use crate::files::File; use crate::system::{MemoryFileSystem, Metadata, OsSystem, System, SystemPath}; use crate::Db; use std::any::Any; @@ -104,14 +104,14 @@ pub trait DbWithTestSystem: Db + Sized { path: impl AsRef, content: impl ToString, ) -> crate::system::Result<()> { - let path = path.as_ref().to_path_buf(); + let path = path.as_ref(); let result = self .test_system() .memory_file_system() - .write_file(&path, content); + .write_file(path, content); if result.is_ok() { - File::touch_path(self, &FilePath::System(path)); + File::touch_path(self, path); } result