cli: Implement `patch delete`

This commit is contained in:
Alexis Sellier 2023-03-06 13:35:25 +01:00
parent e972cda2c4
commit cb3b7a3765
No known key found for this signature in database
2 changed files with 27 additions and 0 deletions

View File

@ -4,6 +4,8 @@ mod checkout;
mod common;
#[path = "patch/create.rs"]
mod create;
#[path = "patch/delete.rs"]
mod delete;
#[path = "patch/list.rs"]
mod list;
#[path = "patch/show.rs"]
@ -36,6 +38,7 @@ Usage
rad patch open [<option>...]
rad patch update <id> [<option>...]
rad patch checkout <id>
rad patch delete <id>
Create/Update options
@ -56,6 +59,7 @@ pub enum OperationName {
Open,
Show,
Update,
Delete,
Checkout,
#[default]
List,
@ -73,6 +77,9 @@ pub enum Operation {
patch_id: Option<PatchId>,
message: Message,
},
Delete {
patch_id: PatchId,
},
Checkout {
patch_id: PatchId,
},
@ -154,6 +161,7 @@ impl Args for Options {
"o" | "open" => op = Some(OperationName::Open),
"s" | "show" => op = Some(OperationName::Show),
"u" | "update" => op = Some(OperationName::Update),
"d" | "delete" => op = Some(OperationName::Delete),
"c" | "checkout" => op = Some(OperationName::Checkout),
unknown => anyhow::bail!("unknown operation '{}'", unknown),
},
@ -176,6 +184,9 @@ impl Args for Options {
OperationName::Show => Operation::Show {
patch_id: patch_id.ok_or_else(|| anyhow!("a patch id must be provided"))?,
},
OperationName::Delete => Operation::Delete {
patch_id: patch_id.ok_or_else(|| anyhow!("a patch id must be provided"))?,
},
OperationName::Update => Operation::Update { patch_id, message },
OperationName::Checkout => Operation::Checkout {
patch_id: patch_id.ok_or_else(|| anyhow!("a patch id must be provided"))?,
@ -230,6 +241,9 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
&options,
)?;
}
Operation::Delete { patch_id } => {
delete::run(&repository, &profile, &patch_id)?;
}
Operation::Checkout { ref patch_id } => {
checkout::run(&repository, &workdir, patch_id)?;
}

View File

@ -0,0 +1,13 @@
use super::*;
use radicle::cob::patch;
use radicle::prelude::*;
use radicle::storage::git::Repository;
pub fn run(repository: &Repository, profile: &Profile, patch_id: &PatchId) -> anyhow::Result<()> {
let signer = &term::signer(profile)?;
let patches = patch::Patches::open(repository)?;
patches.remove(patch_id, signer)?;
Ok(())
}