mirror of
https://seed.radicle.dev/rad:zwTxygwuz5LDGBq255RA2CbNGrz8.git
synced 2026-10-18 19:30:29 +08:00
feat: receive and render canonical ref update events
Cope with the fact that the node can now emit events for canonical refs changing. This does NOT yet add a filter on canonical ref updates. But at least the Ci broker shouldn't crash any more. Signed-off-by: Lars Wirzenius <liw@liw.fi>
This commit is contained in:
+13
-18
@@ -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),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
+28
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user