@@ -23,22 +23,32 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
23
23
. filter ( |g| !g. is_system_group )
24
24
. map ( |g| ( g. name . clone ( ) , g) )
25
25
. collect :: < HashMap < _ , _ > > ( ) ;
26
- let users = zulip
27
- . get_users ( ) ?
28
- . into_iter ( )
26
+ let remote_users = zulip. get_users ( ) ?;
27
+ let email_to_zulip_id = remote_users
28
+ . iter ( )
29
+ . cloned ( )
29
30
. map ( |u| ( u. email , u. user_id ) )
30
31
. collect :: < HashMap < _ , _ > > ( ) ;
32
+ let zulip_id_to_name = remote_users
33
+ . into_iter ( )
34
+ . map ( |u| ( u. user_id , u. name ) )
35
+ . collect :: < HashMap < _ , _ > > ( ) ;
36
+ let name_from_id = |id| {
37
+ zulip_id_to_name
38
+ . get ( & id)
39
+ . unwrap_or_else ( || panic ! ( "Zulip ID {} was not present in /users" , id) )
40
+ } ;
31
41
for ( _, local_group) in & data. zulip_groups ( ) ? {
32
42
match remote_groups. remove ( local_group. name ( ) ) {
33
43
Some ( rg) => {
34
44
let mut remote_members = rg. members . iter ( ) . collect :: < HashSet < _ > > ( ) ;
35
45
for local_member in local_group. members ( ) {
36
46
let i = match local_member {
37
47
ZulipGroupMember :: Id ( i) => * i,
38
- ZulipGroupMember :: Email ( e) => match users . get ( e) {
48
+ ZulipGroupMember :: Email ( e) => match email_to_zulip_id . get ( e) {
39
49
Some ( i) => * i,
40
50
None => {
41
- error ! ( "User email '{e}' is not on Zulip " ) ;
51
+ error ! ( "No user on Zulip uses the email '{e}'" ) ;
42
52
continue ;
43
53
}
44
54
} ,
@@ -49,17 +59,18 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
49
59
} ;
50
60
if !remote_members. remove ( & i) {
51
61
error ! (
52
- "Zulip user '{:?}' is not in the remote Zulip user group" ,
53
- local_member
62
+ "Zulip user '{:?}' is in the team repo for '{}' but not in the remote Zulip user group" ,
63
+ name_from_id( i) ,
64
+ local_group. name( )
54
65
)
55
66
}
56
67
}
57
- for remote_member in remote_members {
68
+ for remote_member_id in remote_members {
58
69
error ! (
59
- "Zulip user '{:?}' is in the remote Zulip user group '{}' but not in the team repo" ,
60
- remote_member ,
61
- local_group. name( )
62
- )
70
+ "Zulip user '{:?}' is in the remote Zulip user group '{}' but not in the team repo" ,
71
+ name_from_id ( * remote_member_id ) ,
72
+ local_group. name( )
73
+ )
63
74
}
64
75
}
65
76
None => error ! (
0 commit comments