diff --git a/crates/noil/src/cli/apply.rs b/crates/noil/src/cli/apply.rs index 894f173..5e51f4f 100644 --- a/crates/noil/src/cli/apply.rs +++ b/crates/noil/src/cli/apply.rs @@ -6,7 +6,10 @@ use crate::{ }; #[derive(clap::Parser)] -pub struct ApplyCommand {} +pub struct ApplyCommand { + #[arg(long = "commit")] + commit: bool, +} impl ApplyCommand { pub async fn execute(&self) -> anyhow::Result<()> { @@ -17,11 +20,15 @@ impl ApplyCommand { let input = String::from_utf8_lossy(&buffer); - let action = print_changes(&input).await?; - match action { - Action::Quit => Ok(()), - Action::Apply { original } => apply(&original).await, - Action::Edit => todo!(), + if !self.commit { + let action = print_changes(&input, !self.commit).await?; + match action { + Action::Quit => Ok(()), + Action::Apply { original } => apply(&original).await, + Action::Edit => todo!(), + } + } else { + apply(&input).await } } } diff --git a/crates/noil/src/cli/edit.rs b/crates/noil/src/cli/edit.rs index bbedcec..ce3f119 100644 --- a/crates/noil/src/cli/edit.rs +++ b/crates/noil/src/cli/edit.rs @@ -17,6 +17,8 @@ use crate::{ parse, }; +const PREVIEW: bool = false; + #[derive(Parser)] pub struct EditCommand { #[arg()] @@ -68,7 +70,7 @@ impl EditCommand { .await .context("read noil file")?; - let res = print_changes(&noil_content).await; + let res = print_changes(&noil_content, PREVIEW).await; let action = match res { Ok(a) => a, @@ -175,6 +177,7 @@ pub async fn apply(input: &str) -> anyhow::Result<()> { if existing.path.is_dir() { tracing::debug!("copying dir"); copy(&existing.path, path).await?; + continue; } tokio::fs::copy(&existing.path, &path) @@ -235,6 +238,9 @@ async fn copy(source: &Path, dest: &Path) -> anyhow::Result<()> { for entry in walkdir::WalkDir::new(source) { let entry = entry?; + + tracing::debug!("copying path: {}", entry.path().display()); + paths.push(entry.path().strip_prefix(source)?.to_path_buf()); } @@ -260,10 +266,12 @@ async fn copy_path(src: &Path, dest: &Path) -> anyhow::Result<()> { } if src.is_dir() { + tracing::info!("copying dir: {}", dest.display()); tokio::fs::create_dir_all(&dest).await.context("copy dir")?; } - if dest.is_file() { + if src.is_file() { + tracing::info!("copying file: {}", dest.display()); tokio::fs::copy(&src, &dest).await.context("copy file")?; } diff --git a/crates/noil/src/commit.rs b/crates/noil/src/commit.rs index 41be684..530a902 100644 --- a/crates/noil/src/commit.rs +++ b/crates/noil/src/commit.rs @@ -14,7 +14,7 @@ pub enum Action { Edit, } -pub async fn print_changes(input: &str) -> anyhow::Result { +pub async fn print_changes(input: &str, preview: bool) -> anyhow::Result { let noil_index = parse_input(input).context("parse input")?; fn print_op(key: &str, index: Option<&str>, path: Option<&Path>) { @@ -64,6 +64,11 @@ pub async fn print_changes(input: &str) -> anyhow::Result { _ => {} } } + + if preview { + return Ok(Action::Quit); + } + eprint!("\nApply changes? (y (yes) / n (abort) / E (edit)): "); let mut stderr = std::io::stderr(); stderr.flush()?;