|
1 | 1 | use std::error::Error; |
| 2 | +use std::fmt::Write; |
2 | 3 | use std::iter; |
3 | 4 | use std::path::PathBuf; |
4 | 5 |
|
5 | 6 | use anstream::eprintln; |
| 7 | +use anyhow::Result; |
6 | 8 | use owo_colors::OwoColorize; |
7 | 9 |
|
8 | 10 | use crate::cli::ExitStatus; |
9 | 11 | use crate::config::{read_config, read_manifest}; |
| 12 | +use crate::printer::Printer; |
| 13 | +use crate::warn_user; |
10 | 14 |
|
11 | | -pub(crate) fn validate_configs(configs: Vec<PathBuf>) -> ExitStatus { |
| 15 | +pub(crate) fn validate_configs(configs: Vec<PathBuf>, printer: Printer) -> Result<ExitStatus> { |
12 | 16 | let mut status = ExitStatus::Success; |
13 | 17 |
|
| 18 | + if configs.is_empty() { |
| 19 | + warn_user!("No configs to check"); |
| 20 | + return Ok(ExitStatus::Success); |
| 21 | + } |
| 22 | + |
14 | 23 | for config in configs { |
15 | 24 | if let Err(err) = read_config(&config) { |
16 | | - eprintln!("{}: {}", "error".red().bold(), err); |
| 25 | + writeln!(printer.stderr(), "{}: {}", "error".red().bold(), err)?; |
17 | 26 | for source in iter::successors(err.source(), |&err| err.source()) { |
18 | | - eprintln!(" {}: {}", "caused by".red().bold(), source); |
| 27 | + writeln!( |
| 28 | + printer.stderr(), |
| 29 | + " {}: {}", |
| 30 | + "caused by".red().bold(), |
| 31 | + source |
| 32 | + )?; |
19 | 33 | } |
20 | 34 | status = ExitStatus::Failure; |
21 | 35 | } |
22 | 36 | } |
23 | 37 |
|
24 | | - status |
| 38 | + if status == ExitStatus::Success { |
| 39 | + writeln!( |
| 40 | + printer.stderr(), |
| 41 | + "{}: All configs are valid", |
| 42 | + "success".green().bold() |
| 43 | + )?; |
| 44 | + } |
| 45 | + |
| 46 | + Ok(status) |
25 | 47 | } |
26 | 48 |
|
27 | | -pub(crate) fn validate_manifest(configs: Vec<PathBuf>) -> ExitStatus { |
| 49 | +pub(crate) fn validate_manifest(manifests: Vec<PathBuf>, printer: Printer) -> Result<ExitStatus> { |
28 | 50 | let mut status = ExitStatus::Success; |
29 | 51 |
|
30 | | - for config in configs { |
31 | | - if let Err(err) = read_manifest(&config) { |
32 | | - eprintln!("{}: {}", "error".red().bold(), err); |
| 52 | + if manifests.is_empty() { |
| 53 | + warn_user!("No manifests to check"); |
| 54 | + return Ok(ExitStatus::Success); |
| 55 | + } |
| 56 | + |
| 57 | + for manifest in manifests { |
| 58 | + if let Err(err) = read_manifest(&manifest) { |
| 59 | + writeln!(printer.stderr(), "{}: {}", "error".red().bold(), err)?; |
33 | 60 | for source in iter::successors(err.source(), |&err| err.source()) { |
34 | | - eprintln!(" {}: {}", "caused by".red().bold(), source); |
| 61 | + writeln!( |
| 62 | + printer.stderr(), |
| 63 | + " {}: {}", |
| 64 | + "caused by".red().bold(), |
| 65 | + source |
| 66 | + )?; |
35 | 67 | } |
36 | 68 | status = ExitStatus::Failure; |
37 | 69 | } |
38 | 70 | } |
39 | 71 |
|
40 | | - status |
| 72 | + if status == ExitStatus::Success { |
| 73 | + writeln!( |
| 74 | + printer.stderr(), |
| 75 | + "{}: All manifests are valid", |
| 76 | + "success".green().bold() |
| 77 | + )?; |
| 78 | + } |
| 79 | + |
| 80 | + Ok(status) |
41 | 81 | } |
0 commit comments