diff --git a/src/commands/check.rs b/src/commands/check.rs index 9393630f8..7a5e1d8bc 100644 --- a/src/commands/check.rs +++ b/src/commands/check.rs @@ -4,11 +4,15 @@ use crate::{commands::open_repository, status_err, Application, RUSTIC_APP}; use abscissa_core::{Command, Runnable, Shutdown}; use anyhow::Result; -use rustic_core::CheckOptions; +use rustic_core::{CheckOptions, SnapshotGroupCriterion}; /// `check` subcommand #[derive(clap::Parser, Command, Debug)] pub(crate) struct CheckCmd { + /// Snapshots to check. If none is given, use filter options to filter from all snapshots + #[clap(value_name = "ID")] + ids: Vec, + /// Check options #[clap(flatten)] opts: CheckOptions, @@ -27,7 +31,16 @@ impl CheckCmd { fn inner_run(&self) -> Result<()> { let config = RUSTIC_APP.config(); let repo = open_repository(&config.repository)?; - repo.check(self.opts)?; + + let groups = repo.get_snapshot_group(&self.ids, SnapshotGroupCriterion::new(), |sn| { + config.snapshot_filter.matches(sn) + })?; + let trees = groups + .into_iter() + .flat_map(|(_, snaps)| snaps) + .map(|snap| snap.tree) + .collect(); + repo.check_with_trees(self.opts, trees)?; Ok(()) } }