Skip to content

Commit f9172dc

Browse files
committed
implement file/dir move via fs_extra
1 parent 07c5629 commit f9172dc

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ netstat2 = "0.11.2"
2929
sysinfo = "0.37.2"
3030
serde_yaml = "0.9.34"
3131
textwrap = "0.16.2"
32+
fs_extra = "1.3.0"
3233

3334
[dev-dependencies]
3435
pretty_assertions = "1.4.1"

crates/core/src/utils.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ use std::{
66
};
77

88
use anyhow::{Context, Result};
9+
use fs_extra::{
10+
dir::{self, move_dir},
11+
file,
12+
};
913
use sha3::{Digest, Sha3_256};
1014
use url::Url;
1115
use walkdir::WalkDir;
@@ -86,15 +90,10 @@ pub fn delete_empty_dirs_from(root_dir: &Path) -> Result<()> {
8690

8791
// Apparently fs::rename doesnt work on tmpfs
8892
pub fn move_file(from: &Path, to: &Path) -> Result<()> {
89-
if let Err(err) = fs::rename(from, to) {
90-
// EXDEV: Cross-device link
91-
if err.raw_os_error() == Some(18) {
92-
fs::copy(from, to)?;
93-
fs::remove_file(from)?;
94-
return Ok(());
95-
}
96-
97-
return Err(err.into());
93+
if from.is_dir() {
94+
dir::move_dir(from, to, &dir::CopyOptions::new().overwrite(true))?;
95+
} else {
96+
file::move_file(from, to, &file::CopyOptions::new().overwrite(true))?;
9897
}
9998

10099
Ok(())

0 commit comments

Comments
 (0)