38 lines
958 B
Rust
38 lines
958 B
Rust
use std::process;
|
|
|
|
use radicle::cob::patch;
|
|
use radicle::storage::git::Repository;
|
|
|
|
use super::*;
|
|
|
|
pub fn run(
|
|
patch_id: &PatchId,
|
|
revision_id: Option<patch::RevisionId>,
|
|
stored: &Repository,
|
|
profile: &Profile,
|
|
) -> anyhow::Result<()> {
|
|
let patches = term::cob::patches(profile, stored)?;
|
|
let Some(patch) = patches.get(patch_id)? else {
|
|
anyhow::bail!("Patch `{patch_id}` not found");
|
|
};
|
|
let revision = if let Some(r) = revision_id {
|
|
patch
|
|
.revision(&r)
|
|
.ok_or(anyhow!("revision `{r}` not found"))?
|
|
} else {
|
|
let (_, r) = patch.latest();
|
|
r
|
|
};
|
|
let (from, to) = revision.range();
|
|
|
|
process::Command::new("rad")
|
|
.current_dir(stored.path())
|
|
.args(["diff", from.to_string().as_str(), to.to_string().as_str()])
|
|
.stdout(process::Stdio::inherit())
|
|
.stderr(process::Stdio::inherit())
|
|
.spawn()?
|
|
.wait()?;
|
|
|
|
Ok(())
|
|
}
|