use abscissa_core::{Command, Runnable};
use rustic_core::{StringList, repofile::SnapshotModification};
use crate::commands::rewrite::RewriteCmd;
#[derive(clap::Parser, Command, Debug)]
pub(crate) struct TagCmd {
#[clap(value_name = "ID")]
ids: Vec<String>,
#[clap(
long,
value_name = "TAG[,TAG,..]",
conflicts_with = "remove",
help_heading = "Tag options"
)]
add: Vec<StringList>,
#[clap(long, value_name = "TAG[,TAG,..]", help_heading = "Tag options")]
remove: Vec<StringList>,
#[clap(
long,
value_name = "TAG[,TAG,..]",
conflicts_with = "remove",
help_heading = "Tag options"
)]
set: Vec<StringList>,
}
impl Runnable for TagCmd {
fn run(&self) {
let modification = SnapshotModification::default()
.add_tags(self.add.clone())
.remove_tags(self.remove.clone())
.set_tags(self.set.clone());
let rewrite = RewriteCmd {
ids: self.ids.clone(),
modification,
forget: true,
..Default::default()
};
rewrite.run();
}
}