@@ -313,7 +313,7 @@ impl Team {
313
313
let zulip_groups = & self . zulip_groups ;
314
314
315
315
for raw_group in zulip_groups {
316
- let mut list = ZulipGroup {
316
+ let mut group = ZulipGroup {
317
317
name : raw_group. name . clone ( ) ,
318
318
includes_team_members : raw_group. include_team_members ,
319
319
members : Vec :: new ( ) ,
@@ -335,25 +335,27 @@ impl Team {
335
335
members. insert ( member) ;
336
336
}
337
337
}
338
+ for excluded in & raw_group. excluded_people {
339
+ if !members. remove ( excluded. as_str ( ) ) {
340
+ bail ! ( "'{excluded}' was specifically excluded from the Zulip group '{}' but they were already not included" , raw_group. name) ;
341
+ }
342
+ }
338
343
339
344
for member in members. iter ( ) {
340
- let member = data
341
- . person ( member)
342
- . ok_or_else ( || err_msg ( format ! ( "member {} is missing" , member ) ) ) ?;
345
+ let member = data. person ( member ) . ok_or_else ( || {
346
+ err_msg ( format ! ( "{} does not have a person configuration" , member) )
347
+ } ) ?;
343
348
let member = match ( member. zulip_id , member. email ( ) ) {
344
349
( Some ( zulip_id) , _) => ZulipGroupMember :: Id ( zulip_id) ,
345
350
( _, Email :: Present ( email) ) => ZulipGroupMember :: Email ( email. to_string ( ) ) ,
346
351
_ => ZulipGroupMember :: Missing ,
347
352
} ;
348
- list. members . push ( member) ;
349
- }
350
- for extra in & raw_group. extra_emails {
351
- list. members . push ( ZulipGroupMember :: Email ( extra. clone ( ) ) ) ;
353
+ group. members . push ( member) ;
352
354
}
353
355
for & extra in & raw_group. extra_zulip_ids {
354
- list . members . push ( ZulipGroupMember :: Id ( extra) ) ;
356
+ group . members . push ( ZulipGroupMember :: Id ( extra) ) ;
355
357
}
356
- groups. push ( list ) ;
358
+ groups. push ( group ) ;
357
359
}
358
360
Ok ( groups)
359
361
}
@@ -576,9 +578,9 @@ pub(crate) struct RawZulipGroup {
576
578
#[ serde( default ) ]
577
579
pub ( crate ) extra_zulip_ids : Vec < usize > ,
578
580
#[ serde( default ) ]
579
- pub ( crate ) extra_emails : Vec < String > ,
580
- #[ serde( default ) ]
581
581
pub ( crate ) extra_teams : Vec < String > ,
582
+ #[ serde( default ) ]
583
+ pub ( crate ) excluded_people : Vec < String > ,
582
584
}
583
585
584
586
#[ derive( Debug ) ]
0 commit comments