mirror of
https://github.com/denoland/deno.git
synced 2024-12-25 08:39:09 -05:00
refactor(ext/node): NodeFs
- add back altered metadata method (#18613)
From https://github.com/denoland/deno/pull/18604/files#r1159992299 We should still have a `metadata` method because it's one system call instead of two on most platforms.
This commit is contained in:
parent
e51985ca74
commit
2d0a9ffbcc
2 changed files with 21 additions and 2 deletions
|
@ -50,8 +50,15 @@ pub trait NodePermissions {
|
||||||
fn check_read(&mut self, path: &Path) -> Result<(), AnyError>;
|
fn check_read(&mut self, path: &Path) -> Result<(), AnyError>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Default, Clone)]
|
||||||
|
pub struct NodeFsMetadata {
|
||||||
|
pub is_file: bool,
|
||||||
|
pub is_dir: bool,
|
||||||
|
}
|
||||||
|
|
||||||
pub trait NodeFs {
|
pub trait NodeFs {
|
||||||
fn current_dir() -> io::Result<PathBuf>;
|
fn current_dir() -> io::Result<PathBuf>;
|
||||||
|
fn metadata<P: AsRef<Path>>(path: P) -> io::Result<NodeFsMetadata>;
|
||||||
fn is_file<P: AsRef<Path>>(path: P) -> bool;
|
fn is_file<P: AsRef<Path>>(path: P) -> bool;
|
||||||
fn is_dir<P: AsRef<Path>>(path: P) -> bool;
|
fn is_dir<P: AsRef<Path>>(path: P) -> bool;
|
||||||
fn exists<P: AsRef<Path>>(path: P) -> bool;
|
fn exists<P: AsRef<Path>>(path: P) -> bool;
|
||||||
|
@ -66,6 +73,18 @@ impl NodeFs for RealFs {
|
||||||
std::env::current_dir()
|
std::env::current_dir()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn metadata<P: AsRef<Path>>(path: P) -> io::Result<NodeFsMetadata> {
|
||||||
|
#[allow(clippy::disallowed_methods)]
|
||||||
|
std::fs::metadata(path).map(|metadata| {
|
||||||
|
// on most systems, calling is_file() and is_dir() is cheap
|
||||||
|
// and returns information already found in the metadata object
|
||||||
|
NodeFsMetadata {
|
||||||
|
is_file: metadata.is_file(),
|
||||||
|
is_dir: metadata.is_dir(),
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn exists<P: AsRef<Path>>(path: P) -> bool {
|
fn exists<P: AsRef<Path>>(path: P) -> bool {
|
||||||
#[allow(clippy::disallowed_methods)]
|
#[allow(clippy::disallowed_methods)]
|
||||||
std::fs::metadata(path).is_ok()
|
std::fs::metadata(path).is_ok()
|
||||||
|
|
|
@ -264,8 +264,8 @@ where
|
||||||
{
|
{
|
||||||
let path = PathBuf::from(path);
|
let path = PathBuf::from(path);
|
||||||
ensure_read_permission::<Env::P>(state, &path)?;
|
ensure_read_permission::<Env::P>(state, &path)?;
|
||||||
if Env::Fs::exists(&path) {
|
if let Ok(metadata) = Env::Fs::metadata(&path) {
|
||||||
if Env::Fs::is_file(&path) {
|
if metadata.is_file {
|
||||||
return Ok(0);
|
return Ok(0);
|
||||||
} else {
|
} else {
|
||||||
return Ok(1);
|
return Ok(1);
|
||||||
|
|
Loading…
Reference in a new issue