Radish alpha
r
Radicle CI broker
Radicle
Git (anonymous pull)
Log in to clone via SSH
feat! change the "Not" event filter to take a list of filters
Lars Wirzenius committed 1 year ago
commit 9e84afecbf9dbc7865c8b8b8c0be55bb7fd8d20c
parent 3edb0ed0170370be263233b0e8194d68be198c6b
3 files changed +9 -8
modified ci-broker.md
@@ -1152,7 +1152,8 @@ adapters:
triggers:
  - adapter: default
    filters:
-
      - !Not Allow
+
      - !Not
+
        - !Allow
~~~


modified src/filter.rs
@@ -77,7 +77,7 @@ pub enum EventFilter {
    Deny,

    /// Allow the opposite of the contained filter.
-
    Not(#[serde(with = "serde_yml::with::singleton_map")] Box<Self>),
+
    Not(Vec<EventFilter>),

    /// Allow if all contained filters allow.
    And(Vec<EventFilter>),
@@ -91,7 +91,7 @@ impl EventFilter {
        match self {
            Self::Allow => return true,
            Self::Deny => return false,
-
            Self::Not(expr) => return !expr.allows(event),
+
            Self::Not(expr) => return !expr.iter().any(|e| e.allows(event)),
            Self::And(exprs) => return exprs.iter().all(|e| e.allows(event)),
            Self::Or(exprs) => return exprs.iter().any(|e| e.allows(event)),
            _ => (),
@@ -575,7 +575,7 @@ mod test {

    #[test]
    fn allows_opposite() {
-
        let filter = EventFilter::Not(Box::new(EventFilter::Deny));
+
        let filter = EventFilter::Not(vec![EventFilter::Deny]);

        eprintln!("filter: {filter:#?}");
        for e in all_events(did(), rid(), refstring("main"), patch_id(), oid(), oid()).iter() {
@@ -612,18 +612,18 @@ mod test {
    #[test]
    fn deserialize_yaml_nested_not() {
        let expected = EventFilter::And(vec![
-
            EventFilter::Not(Box::new(EventFilter::Repository(
+
            EventFilter::Not(vec![EventFilter::Repository(
                "rad:z32iyJDyFLqvPFzwHm8YadK4HQ2EY"
                    .parse::<RepoId>()
                    .unwrap(),
-
            ))),
+
            )]),
            EventFilter::BranchCreated,
            EventFilter::PatchCreated,
        ]);
        let filters = r#"
!And
- !Not
-
    Repository: rad:z32iyJDyFLqvPFzwHm8YadK4HQ2EY
+
   - !Repository "rad:z32iyJDyFLqvPFzwHm8YadK4HQ2EY"
- !BranchCreated
- !PatchCreated
"#;
modified src/filter/arbitrary.rs
@@ -73,7 +73,7 @@ impl Arbitrary for EventFilter {
            Variants::Deny => Deny,
            Variants::Not => {
                g.set_size(size);
-
                Not(Box::new(Self::arbitrary(g)))
+
                Not(vec![Self::arbitrary(g)])
            }
            Variants::And => {
                g.set_size(size);