Skip to content

Commit

Permalink
fix(check): exit after all diffs are shown
Browse files Browse the repository at this point in the history
  • Loading branch information
sgoudham committed Oct 12, 2024
1 parent ea86857 commit 8193a88
Showing 1 changed file with 17 additions and 5 deletions.
22 changes: 17 additions & 5 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -522,6 +522,7 @@ fn render_multi_output(
.map(|(key, iterable)| iterable.into_iter().map(move |v| (key.clone(), v)))
.multi_cartesian_product()
.collect::<Vec<_>>();
let mut check_results: Vec<CheckResult> = Vec::with_capacity(iterables.len());

for iterable in iterables {
let mut ctx = ctx.clone();
Expand Down Expand Up @@ -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(())
}

Expand All @@ -570,7 +576,12 @@ fn maybe_create_parents(filename: &Path) -> anyhow::Result<()> {
Ok(())
}

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

fn check_result_with_file<P>(path: &P, result: &str) -> anyhow::Result<CheckResult>
where
P: AsRef<Path>,
{
Expand All @@ -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<P>(actual: &str, expected_path: P) -> anyhow::Result<()>
Expand Down

0 comments on commit 8193a88

Please sign in to comment.