diff --git a/src/github/issue.rs b/src/github/issue.rs index 43984342..98a4e712 100644 --- a/src/github/issue.rs +++ b/src/github/issue.rs @@ -267,11 +267,16 @@ impl Issue { log::info!("remove_labels from {}: {:?}", self.global_id(), labels); // Don't try to remove labels not already present on this issue. + // Use case-insensitive comparison to match GitHub's behavior when adding labels. let labels = labels .into_iter() - .filter(|l| self.labels().contains(l)) + .filter_map(|l| { + self.labels() + .iter() + .find(|existing| existing.name.to_lowercase() == l.name.to_lowercase()) + .cloned() + }) .collect::>(); - log::info!( "remove_labels: {} filtered to {:?}", self.global_id(), @@ -959,3 +964,44 @@ impl IssueRepository { Ok(permission) } } + +#[cfg(test)] +mod tests { + use super::Label; + + #[test] + fn test_case_insensitive_label_matching() { + let issue_labels = vec![ + Label { + name: "E-needs-mcve".to_string(), + }, + Label { + name: "T-compiler".to_string(), + }, + ]; + + // Simulate what remove_labels does with the fix + let to_remove = vec![ + Label { + name: "e-needs-mcve".to_string(), + }, // lowercase version + ]; + + let matched: Vec