Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
fix: adapt to Oid version differences, Patch title generation
Lars Wirzenius committed 3 months ago
commit 13a686078a41bdc54dd6b05532948820463ab8b0
parent 6c39705
2 files changed +41 -7
modified src/bin/cibtoolcmd/message.rs
@@ -1,5 +1,6 @@
use clap::ValueEnum;

+
use radicle::cob::Title;
use radicle_ci_broker::msg::{Request, RequestBuilder, Response, RunId, RunResult};
use radicle_ci_broker::test::MockNode;

@@ -97,7 +98,7 @@ fn patch() -> Result<Request, MessageError> {
    let mut cache = radicle::cob::cache::NoCache;
    let patch_cob = patches
        .create(
-
            "my patch title",
+
            Title::new("my patch title")?,
            "my patch description",
            MergeTarget::Delegates,
            repo_head,
@@ -155,4 +156,7 @@ pub enum MessageError {

    #[error(transparent)]
    Patch(#[from] radicle::patch::Error),
+

+
    #[error(transparent)]
+
    Title(#[from] radicle::cob::common::TitleError),
}
modified src/msg.rs
@@ -32,6 +32,7 @@ pub use radicle::{
    git::Oid,
    prelude::{NodeId, RepoId},
};
+
pub use radicle_surf::Commit;

use crate::{
    ci_event::{CiEvent, CiEventV1},
@@ -157,7 +158,6 @@ impl<'a> RequestBuilder<'a> {
                }
                Ok(x) => x,
            };
-

            let identity = rad_repo
                .identity()
                .map_err(MessageError::repository_error)?;
@@ -202,10 +202,39 @@ impl<'a> RequestBuilder<'a> {
            tip: Oid,
            base: Oid,
        ) -> Result<Vec<Oid>, radicle_surf::Error> {
+
            // We have an object ID from the `radicle` crate. We need to
+
            // convert into a value of the type `radicle-surf` wants, which
+
            // is from `radicle-git-ext`. As of 2026-01-16, we have multiple
+
            // versions of `radicle-git-ext` in our dependency graph: the latest
+
            // version of `radicle-surf` depends on an older version of `radicle-git-ext`
+
            // thatn `radicle` itself does.
+

+
            // Unwrapping is OK here, because we know `tip` is OK.
+
            #[allow(clippy::unwrap_used)]
+
            let commit = {
+
                let ext_oid = radicle_surf::Oid::try_from(tip.as_bytes()).unwrap();
+
                git_repo.commit(ext_oid).unwrap()
+
            };
            git_repo
-
                .history(tip)?
-
                .take_while(|c| if let Ok(c) = c { c.id != base } else { false })
-
                .map(|r| r.map(|c| c.id))
+
                .history(commit)?
+
                .take_while(|c| {
+
                    if let Ok(c) = c {
+
                        c.id.as_bytes() != base.as_bytes()
+
                    } else {
+
                        false
+
                    }
+
                })
+
                .filter_map(|result| {
+
                    if let Ok(commit) = result {
+
                        if let Ok(id) = Oid::try_from(commit.id.as_bytes()) {
+
                            Some(Ok(id))
+
                        } else {
+
                            None
+
                        }
+
                    } else {
+
                        None
+
                    }
+
                })
                .collect::<Result<Vec<Oid>, _>>()
        }

@@ -1053,6 +1082,7 @@ impl MessageError {
pub mod trigger_from_ci_event_tests {
    use crate::ci_event::{CiEvent, CiEventV1};
    use crate::msg::{EventType, Request, RequestBuilder};
+
    use radicle::cob::Title;
    use radicle::git::RefString;
    use radicle::patch::{MergeTarget, Patches};
    use radicle::prelude::Did;
@@ -1177,7 +1207,7 @@ pub mod trigger_from_ci_event_tests {
        let mut patches = Patches::open(&project.repo)?;
        let mut cache = radicle::cob::cache::NoCache;
        let patch_cob = patches.create(
-
            "my patch title",
+
            Title::new("my patch title").unwrap(),
            "my patch description",
            MergeTarget::Delegates,
            repo_head,
@@ -1249,7 +1279,7 @@ pub mod trigger_from_ci_event_tests {
        let mut patches = Patches::open(&project.repo)?;
        let mut cache = radicle::cob::cache::NoCache;
        let patch_cob = patches.create(
-
            "my patch title",
+
            Title::new("my patch title").unwrap(),
            "my patch description",
            MergeTarget::Delegates,
            repo_head,