cli: Add `patch archive` sub-command
This commit is contained in:
parent
414477a316
commit
7d1e3d489b
|
|
@ -1,3 +1,5 @@
|
||||||
|
#[path = "patch/archive.rs"]
|
||||||
|
mod archive;
|
||||||
#[path = "patch/checkout.rs"]
|
#[path = "patch/checkout.rs"]
|
||||||
mod checkout;
|
mod checkout;
|
||||||
#[path = "patch/common.rs"]
|
#[path = "patch/common.rs"]
|
||||||
|
|
@ -38,6 +40,7 @@ Usage
|
||||||
rad patch list [--all|--merged|--open|--archived] [<option>...]
|
rad patch list [--all|--merged|--open|--archived] [<option>...]
|
||||||
rad patch show <patch-id> [<option>...]
|
rad patch show <patch-id> [<option>...]
|
||||||
rad patch open [<option>...]
|
rad patch open [<option>...]
|
||||||
|
rad patch archive <patch-id> [<option>...]
|
||||||
rad patch update <patch-id> [<option>...]
|
rad patch update <patch-id> [<option>...]
|
||||||
rad patch checkout <patch-id> [<option>...]
|
rad patch checkout <patch-id> [<option>...]
|
||||||
rad patch delete <patch-id> [<option>...]
|
rad patch delete <patch-id> [<option>...]
|
||||||
|
|
@ -67,6 +70,7 @@ pub enum OperationName {
|
||||||
Open,
|
Open,
|
||||||
Show,
|
Show,
|
||||||
Update,
|
Update,
|
||||||
|
Archive,
|
||||||
Delete,
|
Delete,
|
||||||
Checkout,
|
Checkout,
|
||||||
#[default]
|
#[default]
|
||||||
|
|
@ -85,6 +89,9 @@ pub enum Operation {
|
||||||
patch_id: Option<Rev>,
|
patch_id: Option<Rev>,
|
||||||
message: Message,
|
message: Message,
|
||||||
},
|
},
|
||||||
|
Archive {
|
||||||
|
patch_id: Rev,
|
||||||
|
},
|
||||||
Delete {
|
Delete {
|
||||||
patch_id: Rev,
|
patch_id: Rev,
|
||||||
},
|
},
|
||||||
|
|
@ -180,6 +187,7 @@ impl Args for Options {
|
||||||
"u" | "update" => op = Some(OperationName::Update),
|
"u" | "update" => op = Some(OperationName::Update),
|
||||||
"d" | "delete" => op = Some(OperationName::Delete),
|
"d" | "delete" => op = Some(OperationName::Delete),
|
||||||
"c" | "checkout" => op = Some(OperationName::Checkout),
|
"c" | "checkout" => op = Some(OperationName::Checkout),
|
||||||
|
"a" | "archive" => op = Some(OperationName::Archive),
|
||||||
unknown => anyhow::bail!("unknown operation '{}'", unknown),
|
unknown => anyhow::bail!("unknown operation '{}'", unknown),
|
||||||
},
|
},
|
||||||
Value(val)
|
Value(val)
|
||||||
|
|
@ -202,6 +210,9 @@ impl Args for Options {
|
||||||
patch_id: patch_id.ok_or_else(|| anyhow!("a patch must be provided"))?,
|
patch_id: patch_id.ok_or_else(|| anyhow!("a patch must be provided"))?,
|
||||||
},
|
},
|
||||||
OperationName::Update => Operation::Update { patch_id, message },
|
OperationName::Update => Operation::Update { patch_id, message },
|
||||||
|
OperationName::Archive => Operation::Archive {
|
||||||
|
patch_id: patch_id.ok_or_else(|| anyhow!("a patch id must be provided"))?,
|
||||||
|
},
|
||||||
OperationName::Checkout => Operation::Checkout {
|
OperationName::Checkout => Operation::Checkout {
|
||||||
patch_id: patch_id.ok_or_else(|| anyhow!("a patch must be provided"))?,
|
patch_id: patch_id.ok_or_else(|| anyhow!("a patch must be provided"))?,
|
||||||
},
|
},
|
||||||
|
|
@ -259,6 +270,10 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
|
||||||
&options,
|
&options,
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
|
Operation::Archive { ref patch_id } => {
|
||||||
|
let patch_id = patch_id.resolve::<PatchId>(&repository.backend)?;
|
||||||
|
archive::run(&repository, &profile, &patch_id)?;
|
||||||
|
}
|
||||||
Operation::Delete { patch_id } => {
|
Operation::Delete { patch_id } => {
|
||||||
let patch_id = patch_id.resolve(&repository.backend)?;
|
let patch_id = patch_id.resolve(&repository.backend)?;
|
||||||
delete::run(&repository, &profile, &patch_id)?;
|
delete::run(&repository, &profile, &patch_id)?;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
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 mut patches = patch::Patches::open(repository)?;
|
||||||
|
let Ok(mut patch) = patches.get_mut(patch_id) else {
|
||||||
|
anyhow::bail!("Patch `{patch_id}` not found");
|
||||||
|
};
|
||||||
|
patch.archive(&signer)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
@ -955,6 +955,11 @@ impl<'a, 'g> PatchMut<'a, 'g> {
|
||||||
self.transaction("Lifecycle", signer, |tx| tx.lifecycle(state))
|
self.transaction("Lifecycle", signer, |tx| tx.lifecycle(state))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Archive a patch.
|
||||||
|
pub fn archive<G: Signer>(&mut self, signer: &G) -> Result<EntryId, Error> {
|
||||||
|
self.lifecycle(State::Archived, signer)
|
||||||
|
}
|
||||||
|
|
||||||
/// Tag a patch.
|
/// Tag a patch.
|
||||||
pub fn tag<G: Signer>(
|
pub fn tag<G: Signer>(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue