diff --git a/Cargo.lock b/Cargo.lock index 1ab22f1..e42055c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -347,6 +347,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "dircpy" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4479788c6c76674c1551ef44c953101554e7edadb5ea0920797a2280d87eb3d" +dependencies = [ + "log", + "walkdir", +] + [[package]] name = "dirs" version = "3.0.1" @@ -477,6 +487,7 @@ dependencies = [ "clap", "colored", "csv", + "dircpy", "dirs", "duct", "embed-resource", @@ -1403,6 +1414,15 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + [[package]] name = "schannel" version = "0.1.19" @@ -1960,6 +1980,17 @@ dependencies = [ "libc", ] +[[package]] +name = "walkdir" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" +dependencies = [ + "same-file", + "winapi 0.3.9", + "winapi-util", +] + [[package]] name = "want" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index a1f3b3e..94abb90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ log = "0.4.11" env_logger = "0.8.1" atty = "0.2.14" encoding_rs_io = "0.1.7" +dircpy = "0.3.4" [dev-dependencies] pretty_assertions = "0.6.1" diff --git a/src/directory_portal.rs b/src/directory_portal.rs index 25f1e73..37309ee 100644 --- a/src/directory_portal.rs +++ b/src/directory_portal.rs @@ -1,3 +1,4 @@ +use dircpy::copy_dir; use log::*; use std::path::Path; use tempfile::{tempdir, TempDir}; @@ -21,7 +22,8 @@ impl> DirectoryPortal

{ self.temp_dir.path(), self.target.as_ref() ); - std::fs::rename(&self.temp_dir, &self.target)?; + copy_dir(&self.temp_dir, &self.target)?; + std::fs::remove_dir_all(&self.temp_dir)?; Ok(self.target) } }