0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-01 12:16:11 -05:00

perf(node/fs/copy): reduce metadata lookups copying directory (#27495)

This commit is contained in:
David Sherret 2024-12-30 00:36:29 -05:00 committed by GitHub
parent 5194222e02
commit fd8400eaec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -723,30 +723,34 @@ fn cp(from: &Path, to: &Path) -> FsResult<()> {
} }
} }
match (fs::metadata(to), fs::symlink_metadata(to)) { if let Ok(m) = fs::metadata(to) {
(Ok(m), _) if m.is_dir() => cp_( if m.is_dir() {
source_meta, return cp_(
from, source_meta,
&to.join(from.file_name().ok_or_else(|| { from,
io::Error::new( &to.join(from.file_name().ok_or_else(|| {
io::ErrorKind::InvalidInput, io::Error::new(
"the source path is not a valid file", io::ErrorKind::InvalidInput,
) "the source path is not a valid file",
})?), )
)?, })?),
(_, Ok(m)) if is_identical(&source_meta, &m) => { );
}
}
if let Ok(m) = fs::symlink_metadata(to) {
if is_identical(&source_meta, &m) {
return Err( return Err(
io::Error::new( io::Error::new(
io::ErrorKind::InvalidInput, io::ErrorKind::InvalidInput,
"the source and destination are the same file", "the source and destination are the same file",
) )
.into(), .into(),
) );
} }
_ => cp_(source_meta, from, to)?,
} }
Ok(()) cp_(source_meta, from, to)
} }
#[cfg(not(windows))] #[cfg(not(windows))]