Radish alpha
r
Radicle CI broker
Radicle
Git (anonymous pull)
Log in to clone via SSH
feat(src/msg.rs)! don't panic on missing commit or unknown type
Lars Wirzenius committed 1 year ago
commit 105a09a8db9c708976121d4ca50f0f66344ad0b9
parent a3fbb6e0e44f78b5124f1d83e8a0b76107929532
1 file changed +20 -4
modified src/msg.rs
@@ -315,7 +315,7 @@ impl Request {

    /// Return the commit the event concerns. In other words, the
    /// commit that CI should run against.
-
    pub fn commit(&self) -> Oid {
+
    pub fn commit(&self) -> Result<Oid, MessageError> {
        match self {
            Self::Trigger {
                common: _,
@@ -323,11 +323,19 @@ impl Request {
                patch,
            } => {
                if let Some(push) = push {
-
                    *push.commits.first().unwrap()
+
                    if let Some(oid) = push.commits.first() {
+
                        Ok(*oid)
+
                    } else {
+
                        Err(MessageError::NoCommits)
+
                    }
                } else if let Some(patch) = patch {
-
                    *patch.patch.commits.first().unwrap()
+
                    if let Some(oid) = patch.patch.commits.first() {
+
                        Ok(*oid)
+
                    } else {
+
                        Err(MessageError::NoCommits)
+
                    }
                } else {
-
                    panic!("neither push not panic: {self:#?}");
+
                    Err(MessageError::UnknownRequest)
                }
            }
        }
@@ -698,6 +706,14 @@ pub enum MessageError {
    #[error("RequestBuilder has no event handler set")]
    NoEventHandler,

+
    /// Request message lacks commits to run CI on.
+
    #[error("unacceptable request message: lacks Git commits to run CI on")]
+
    NoCommits,
+

+
    /// Request message is neither a "push" nor a "patch"
+
    #[error("unacceptable request message: neither 'push' nor 'patch'")]
+
    UnknownRequest,
+

    /// Failed to serialize a request message as JSON. This should
    /// never happen and likely indicates a programming failure.
    #[error("failed to serialize a request into JSON to a file handle")]