tools: Add optional revision to `rad-merge`

This commit is contained in:
cloudhead 2024-08-20 16:23:32 +02:00
parent 86a0443916
commit ab6ca14c88
No known key found for this signature in database
1 changed files with 25 additions and 7 deletions

View File

@ -1,17 +1,28 @@
use std::collections::HashSet;
use std::env;
use anyhow::anyhow;
use radicle::cob::patch::PatchId;
use anyhow::{anyhow, bail};
use radicle::cob::patch::{PatchId, RevisionId};
use radicle::git::Oid;
use radicle::storage::ReadStorage;
use radicle_cli::terminal as term;
fn main() -> anyhow::Result<()> {
let pid: PatchId = env::args()
.nth(1)
.ok_or_else(|| anyhow!("usage: rad-merge <patch-id>"))?
.parse()?;
let args = env::args().skip(1).collect::<Vec<_>>();
let (pid, rev) = match args.as_slice() {
[pid, rev] => {
let pid: PatchId = pid.parse()?;
let rev: Oid = rev.parse()?;
(pid, Some(RevisionId::from(rev)))
}
[pid] => {
let pid: PatchId = pid.parse()?;
(pid, None)
}
_ => bail!("usage: rad-merge <patch-id> [<revision-id>]"),
};
let profile = radicle::Profile::load()?;
let (working, rid) = radicle::rad::cwd()?;
let stored = profile.storage.repository(rid)?;
@ -21,7 +32,14 @@ fn main() -> anyhow::Result<()> {
if patch.is_merged() {
anyhow::bail!("fatal: patch {pid} is already merged");
}
let (revision, r) = patch.latest();
let (revision, r) = if let Some(id) = rev {
let r = patch
.revision(&id)
.ok_or_else(|| anyhow!("revision {id} not found"))?;
(id, r)
} else {
patch.latest()
};
let head = r.head();
let mut revwalk = stored.backend.revwalk()?;