From 16336ce75895ed6a908f6c3b735402cf149060c1 Mon Sep 17 00:00:00 2001 From: Todd Martin <33560895+martintc@users.noreply.github.com> Date: Sun, 18 Dec 2022 19:27:06 -0800 Subject: [PATCH] Windows directory copy (#292) * windows doesn't have "ls" on the path so make a test for windows that tests for a command in the path * implement windows specific implementation * remove dead code * fix formatting * Add a test for xcopy on windows --- lib/src/actions/directory/copy.rs | 18 ++++++++++++++++++ lib/src/steps/initializers/command_found.rs | 10 ++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/src/actions/directory/copy.rs b/lib/src/actions/directory/copy.rs index a3f32fbd..bee63c82 100644 --- a/lib/src/actions/directory/copy.rs +++ b/lib/src/actions/directory/copy.rs @@ -16,6 +16,24 @@ impl DirectoryCopy {} impl DirectoryAction for DirectoryCopy {} +#[cfg(target_family = "windows")] +impl Action for DirectoryCopy { + fn plan(&self, manifest: &Manifest, _context: &Contexts) -> anyhow::Result> { + let from: String = self.resolve(manifest, &self.from).display().to_string(); + + Ok(vec![Step { + atom: Box::new(Exec { + command: String::from("Xcopy"), + arguments: vec!["/E".to_string(), "/I".to_string(), from, self.to.clone()], + ..Default::default() + }), + initializers: vec![], + finalizers: vec![], + }]) + } +} + +#[cfg(target_family = "unix")] impl Action for DirectoryCopy { fn plan(&self, manifest: &Manifest, _context: &Contexts) -> anyhow::Result> { let from: String = self.resolve(manifest, &self.from).display().to_string(); diff --git a/lib/src/steps/initializers/command_found.rs b/lib/src/steps/initializers/command_found.rs index 58410bc9..cbd4d563 100644 --- a/lib/src/steps/initializers/command_found.rs +++ b/lib/src/steps/initializers/command_found.rs @@ -32,6 +32,16 @@ mod tests { assert_eq!(true, result.is_ok()); assert_eq!(true, result.unwrap()); } + + #[cfg(target_family = "windows")] + #[test] + fn return_true_windows_xcopy() { + let initializer = CommandFound("Xcopy"); + let result = initializer.initialize(); + + assert_eq!(true, result.is_ok()); + assert_eq!(true, result.unwrap()); + } #[cfg(target_family = "unix")] #[test]