28 lines
687 B
Rust
28 lines
687 B
Rust
use radicle::storage::git::Repository;
|
|
|
|
use super::*;
|
|
|
|
use crate::terminal as term;
|
|
|
|
pub fn run(
|
|
patch_id: &PatchId,
|
|
add: BTreeSet<Label>,
|
|
delete: BTreeSet<Label>,
|
|
profile: &Profile,
|
|
repository: &Repository,
|
|
) -> anyhow::Result<()> {
|
|
let signer = term::signer(profile)?;
|
|
let mut patches = term::cob::patches_mut(profile, repository, &signer)?;
|
|
let Ok(mut patch) = patches.get_mut(patch_id) else {
|
|
anyhow::bail!("Patch `{patch_id}` not found");
|
|
};
|
|
let labels = patch
|
|
.labels()
|
|
.filter(|l| !delete.contains(l))
|
|
.chain(add.iter())
|
|
.cloned()
|
|
.collect::<Vec<_>>();
|
|
patch.label(labels)?;
|
|
Ok(())
|
|
}
|