From 7aa3ca651ec71d1e57da9cedbf50a67720a15280 Mon Sep 17 00:00:00 2001 From: Adam French Date: Wed, 18 Feb 2026 17:37:01 +0000 Subject: [PATCH] Copy files with tour init --- .gitignore | 1 + src/init.rs | 11 ++++++++++- src/main.rs | 2 +- src/utils.rs | 19 +++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/utils.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..7ca160b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +.tour/ diff --git a/src/init.rs b/src/init.rs index 6797798..0ea1f3f 100644 --- a/src/init.rs +++ b/src/init.rs @@ -4,6 +4,7 @@ // Populate with tour/steps/0/files/file2 use crate::TOUR_DIR; +use crate::utils::copy_files; use std::fs; use std::fs::File; @@ -11,13 +12,21 @@ use std::io::Write; use std::path::PathBuf; pub fn init(files: Vec, message: String) -> Result<(), std::io::Error> { - if fs::exists(TOUR_DIR).is_ok() { + // Convert PathBuf to &Path + let files = files.iter().map(|p| p.as_path()).collect(); + + // Check TOUR_DIR exists (it shouldn't because user calls init) + if fs::exists(TOUR_DIR)? { panic!("{} folder exists", TOUR_DIR); } + // Create dir recursively fs::create_dir_all(format!("{}/{}", TOUR_DIR, "steps/0/files"))?; + // Copy files listed by command to step 0 let dest = format!("{}/steps/0/files/", TOUR_DIR); + copy_files(files, dest.as_ref())?; + // Copy message to step 0 let mut message_file = File::create("./.tour/steps/0/message")?; write!(message_file, "{}", message)?; diff --git a/src/main.rs b/src/main.rs index 5493d55..1a46bc0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use clap::{Parser, Subcommand}; use std::error::Error; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; mod init; mod utils; diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..45b184a --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,19 @@ +use std::fs; +use std::io; +use std::path::Path; + +pub fn copy_files(files: Vec<&Path>, dest_dir: &Path) -> Result<(), io::Error> { + for file in files { + // Get the relative path components + let dest_path = dest_dir.join(file); + + // Create parent directories if they don't exist + if let Some(parent) = dest_path.parent() { + fs::create_dir_all(parent)?; + } + + // Copy the file + fs::copy(file, dest_path)?; + } + Ok(()) +}