#![allow(clippy::never_loop)]
#![allow(unused_variables)]
use std::{
path::{Path, PathBuf},
process::exit,
};
use abscissa_core::{Command, Runnable};
use clap::Parser;
use crate::list_versions::AffectedVersionLister;
use crate::prelude::*;
#[derive(Command, Debug, Default, Parser)]
pub struct ListAffectedVersionsCmd {
#[clap(
min_values = 1,
help = "filesystem path to the RustSec advisory DB git repo"
)]
path: Vec<PathBuf>,
}
impl Runnable for ListAffectedVersionsCmd {
fn run(&self) {
let repo_path = match self.path.len() {
0 => Path::new("."),
1 => self.path[0].as_path(),
_ => unreachable!(),
};
let lister = AffectedVersionLister::new(repo_path).unwrap_or_else(|e| {
status_err!(
"error loading advisory DB repo from {}: {}",
repo_path.display(),
e
);
exit(1);
});
let advisories = lister.advisory_db().iter();
if advisories.len() == 0 {
status_err!("no advisories found in {}", repo_path.display());
exit(1);
}
lister.process_all_advisories().unwrap_or_else(|e| {
status_err!(
"error listing affected versions for DB {}: {}",
repo_path.display(),
e
);
exit(1);
});
}
}