From 8193a8828f0cbfd87af99389cb3919e41006394f Mon Sep 17 00:00:00 2001 From: sgoudham Date: Sat, 12 Oct 2024 09:47:51 +0100 Subject: [PATCH] fix(check): exit after all diffs are shown --- src/main.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5010f4a..19aa4f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -522,6 +522,7 @@ fn render_multi_output( .map(|(key, iterable)| iterable.into_iter().map(move |v| (key.clone(), v))) .multi_cartesian_product() .collect::>(); + let mut check_results: Vec = Vec::with_capacity(iterables.len()); for iterable in iterables { let mut ctx = ctx.clone(); @@ -549,12 +550,17 @@ fn render_multi_output( .context("Filename template render failed")?; if args.check.is_some() { - check_result_with_file(&filename, &result).context("Check mode failed")?; + check_results + .push(check_result_with_file(&filename, &result).context("Check mode failed")?); } else { write_template(args.dry_run, &filename, result)?; } } + if check_results.iter().any(|r| matches!(r, CheckResult::Fail)) { + std::process::exit(1); + } + Ok(()) } @@ -570,7 +576,12 @@ fn maybe_create_parents(filename: &Path) -> anyhow::Result<()> { Ok(()) } -fn check_result_with_file

(path: &P, result: &str) -> anyhow::Result<()> +enum CheckResult { + Pass, + Fail, +} + +fn check_result_with_file

(path: &P, result: &str) -> anyhow::Result where P: AsRef, { @@ -581,12 +592,13 @@ where path.display() ) })?; - if *result != expected { + if *result == expected { + Ok(CheckResult::Pass) + } else { eprintln!("Output does not match {}", path.display()); invoke_difftool(result, path)?; - std::process::exit(1); + Ok(CheckResult::Fail) } - Ok(()) } fn invoke_difftool

(actual: &str, expected_path: P) -> anyhow::Result<()>