Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
feat: receive and render canonical ref update events
Lars Wirzenius committed 7 months ago
commit 3782dc2b7b1f8fbd59c9f00b8069a8b09e32db58
parent 6f29315
3 files changed +47 -18
modified src/ci_event.rs
@@ -12,7 +12,7 @@ use radicle::{
    storage::RefUpdate,
};

-
use crate::refs::{ref_string, TagName};
+
use crate::refs::{ref_string, GenericRefName, TagName};

#[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize)]
#[non_exhaustive]
@@ -74,6 +74,12 @@ pub enum CiEventV1 {
        patch: PatchId,
        new_tip: Oid,
    },
+
    CanonicalRefUpdated {
+
        from_node: NodeId,
+
        repo: RepoId,
+
        refname: GenericRefName,
+
        target: Oid,
+
    },
}

impl CiEvent {
@@ -88,6 +94,7 @@ impl CiEvent {
            Self::V1(CiEventV1::TagDeleted { from_node, .. }) => Some(from_node),
            Self::V1(CiEventV1::PatchCreated { from_node, .. }) => Some(from_node),
            Self::V1(CiEventV1::PatchUpdated { from_node, .. }) => Some(from_node),
+
            Self::V1(CiEventV1::CanonicalRefUpdated { from_node, .. }) => Some(from_node),
        }
    }

@@ -102,6 +109,7 @@ impl CiEvent {
            Self::V1(CiEventV1::TagDeleted { repo, .. }) => Some(repo),
            Self::V1(CiEventV1::PatchCreated { repo, .. }) => Some(repo),
            Self::V1(CiEventV1::PatchUpdated { repo, .. }) => Some(repo),
+
            Self::V1(CiEventV1::CanonicalRefUpdated { repo, .. }) => Some(repo),
        }
    }

@@ -111,39 +119,25 @@ impl CiEvent {
            Self::V1(CiEventV1::BranchCreated { branch, .. }) => Some(branch),
            Self::V1(CiEventV1::BranchUpdated { branch, .. }) => Some(branch),
            Self::V1(CiEventV1::BranchDeleted { branch, .. }) => Some(branch),
-
            Self::V1(CiEventV1::TagCreated { .. }) => None,
-
            Self::V1(CiEventV1::TagUpdated { .. }) => None,
-
            Self::V1(CiEventV1::TagDeleted { .. }) => None,
-
            Self::V1(CiEventV1::PatchCreated { .. }) => None,
-
            Self::V1(CiEventV1::PatchUpdated { .. }) => None,
+
            _ => None,
        }
    }

    pub fn tag(&self) -> Option<&TagName> {
        match self {
            Self::V1(CiEventV1::Shutdown) => None,
-
            Self::V1(CiEventV1::BranchCreated { .. }) => None,
-
            Self::V1(CiEventV1::BranchUpdated { .. }) => None,
-
            Self::V1(CiEventV1::BranchDeleted { .. }) => None,
            Self::V1(CiEventV1::TagCreated { tag, .. }) => Some(tag),
            Self::V1(CiEventV1::TagUpdated { tag, .. }) => Some(tag),
            Self::V1(CiEventV1::TagDeleted { tag, .. }) => Some(tag),
-
            Self::V1(CiEventV1::PatchCreated { .. }) => None,
-
            Self::V1(CiEventV1::PatchUpdated { .. }) => None,
+
            _ => None,
        }
    }

    pub fn patch_id(&self) -> Option<&PatchId> {
        match self {
-
            Self::V1(CiEventV1::Shutdown) => None,
-
            Self::V1(CiEventV1::BranchCreated { .. }) => None,
-
            Self::V1(CiEventV1::BranchUpdated { .. }) => None,
-
            Self::V1(CiEventV1::BranchDeleted { .. }) => None,
-
            Self::V1(CiEventV1::TagCreated { .. }) => None,
-
            Self::V1(CiEventV1::TagUpdated { .. }) => None,
-
            Self::V1(CiEventV1::TagDeleted { .. }) => None,
            Self::V1(CiEventV1::PatchCreated { patch, .. }) => Some(patch),
            Self::V1(CiEventV1::PatchUpdated { patch, .. }) => Some(patch),
+
            _ => None,
        }
    }

@@ -158,6 +152,7 @@ impl CiEvent {
            Self::V1(CiEventV1::TagDeleted { tip, .. }) => Some(tip),
            Self::V1(CiEventV1::PatchCreated { new_tip, .. }) => Some(new_tip),
            Self::V1(CiEventV1::PatchUpdated { new_tip, .. }) => Some(new_tip),
+
            Self::V1(CiEventV1::CanonicalRefUpdated { target, .. }) => Some(target),
        }
    }

modified src/pages.rs
@@ -280,6 +280,12 @@ impl PageData {
                    patch,
                    new_tip,
                }) => render_event(repo, self.repo_alias(*repo), &patch.to_string(), new_tip),
+
                CiEvent::V1(CiEventV1::CanonicalRefUpdated {
+
                    from_node: _,
+
                    repo,
+
                    refname,
+
                    target,
+
                }) => render_event(repo, self.repo_alias(*repo), refname.as_str(), target),
            };

            table.push_child(
modified src/refs.rs
@@ -9,6 +9,34 @@ use radicle::{
    git::{BranchName, Component, Namespaced, Qualified, RefStr, RefString},
};

+
/// A generic ref name.
+
#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Serialize)]
+
pub struct GenericRefName(RefString);
+

+
impl GenericRefName {
+
    pub fn as_str(&self) -> &str {
+
        self.as_ref()
+
    }
+
}
+

+
impl AsRef<str> for GenericRefName {
+
    fn as_ref(&self) -> &str {
+
        self.0.as_str()
+
    }
+
}
+

+
impl From<Qualified<'_>> for GenericRefName {
+
    fn from(from: Qualified<'_>) -> Self {
+
        Self::from(&from)
+
    }
+
}
+

+
impl From<&Qualified<'_>> for GenericRefName {
+
    fn from(from: &Qualified<'_>) -> Self {
+
        Self(from.to_ref_string())
+
    }
+
}
+

/// A tag name.
///
/// This is exactly like a [`RefString`], but meant to have stronger