mirror of
https://github.com/astral-sh/ruff.git
synced 2025-11-25 14:24:10 +00:00
Change File::touch_path to only take a SystemPath (#12273)
This commit is contained in:
parent
e8b5341c97
commit
abcf07c8c5
4 changed files with 29 additions and 28 deletions
|
|
@ -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<File>) {
|
||||
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<File>) {
|
||||
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
|
||||
|
|
|
|||
|
|
@ -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<SystemPath>,
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue