Skip to content

Commit c973d52

Browse files
Merge pull request #835 from rylev/improve-check-synced-errors
Improve error messages when checking synced Zulip user groups
2 parents 83d1f1a + fbc7350 commit c973d52

File tree

2 files changed

+26
-13
lines changed

2 files changed

+26
-13
lines changed

src/check_synced.rs

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,32 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
2323
.filter(|g| !g.is_system_group)
2424
.map(|g| (g.name.clone(), g))
2525
.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()
2930
.map(|u| (u.email, u.user_id))
3031
.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+
};
3141
for (_, local_group) in &data.zulip_groups()? {
3242
match remote_groups.remove(local_group.name()) {
3343
Some(rg) => {
3444
let mut remote_members = rg.members.iter().collect::<HashSet<_>>();
3545
for local_member in local_group.members() {
3646
let i = match local_member {
3747
ZulipGroupMember::Id(i) => *i,
38-
ZulipGroupMember::Email(e) => match users.get(e) {
48+
ZulipGroupMember::Email(e) => match email_to_zulip_id.get(e) {
3949
Some(i) => *i,
4050
None => {
41-
error!("User email '{e}' is not on Zulip");
51+
error!("No user on Zulip uses the email '{e}'");
4252
continue;
4353
}
4454
},
@@ -49,17 +59,18 @@ fn check_zulip(data: &Data) -> Result<(), failure::Error> {
4959
};
5060
if !remote_members.remove(&i) {
5161
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()
5465
)
5566
}
5667
}
57-
for remote_member in remote_members {
68+
for remote_member_id in remote_members {
5869
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+
)
6374
}
6475
}
6576
None => error!(

src/zulip.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ struct ZulipUsers {
9696
}
9797

9898
/// A single Zulip user
99-
#[derive(Deserialize, PartialEq, Eq, Hash)]
99+
#[derive(Clone, Deserialize, PartialEq, Eq, Hash)]
100100
pub(crate) struct ZulipUser {
101101
#[serde(rename = "delivery_email")]
102102
pub(crate) email: String,
103103
pub(crate) user_id: usize,
104+
#[serde(rename = "full_name")]
105+
pub(crate) name: String,
104106
}
105107

106108
/// A collection of Zulip user groups

0 commit comments

Comments
 (0)