private void RemoveLabel(GitHubEventRepository repository, GitHubEventLabel label) { var index = _indexService.Index; if (index is null) { return; } var crawledRepo = index.Repos.SingleOrDefault(r => r.Id == repository.Id); if (crawledRepo is null) { return; } var crawledLabel = crawledRepo.Labels.SingleOrDefault(l => l.Id == label.Id); if (crawledLabel is null) { return; } crawledRepo.Labels = crawledRepo.Labels.CopyAndRemove(crawledLabel); var removedTrieTerms = new[] { $"label:{crawledLabel.Name}" }; foreach (var issue in crawledRepo.Issues.Values) { RemoveTrieTerms(issue, removedTrieTerms); } _indexService.NotifyIndexChanged(); }
private CrawledLabel GetOrCreateLabel(GitHubEventRepository repository, GitHubEventLabel label) { var index = _indexService.Index; Debug.Assert(index is not null); var crawledRepo = index.Repos.SingleOrDefault(r => r.Id == repository.Id); Debug.Assert(crawledRepo is not null); var matchingLabels = crawledRepo.Labels.Where(l => l.Id == label.Id).ToArray(); if (matchingLabels.Length == 0) { return(CreateLabel(crawledRepo, label)); } if (matchingLabels.Length > 1) { var label1 = matchingLabels[0]; var label2 = matchingLabels[1]; _logger.LogError("In repo {org}/{repo} multiple labels have id {labelId}: '{label1Name}', '{label2Name}'", crawledRepo.Org, crawledRepo.Name, label.Id, label1.Name, label2.Name); } return(matchingLabels[0]); }
private static CrawledLabel CreateLabel(CrawledRepo crawledRepo, GitHubEventLabel label) { var crawledLabel = new CrawledLabel(); crawledLabel.Id = label.Id; UpdateLabel(label, crawledLabel); crawledRepo.Labels = crawledRepo.Labels.CopyAndAdd(crawledLabel); return(crawledLabel); }
private void UpdateLabel(GitHubEventRepository repository, GitHubEventLabel label) { var index = _indexService.Index; if (index is null) { return; } var crawledRepo = index.Repos.SingleOrDefault(r => r.Id == repository.Id); if (crawledRepo is null) { return; } var crawledLabel = crawledRepo.Labels.SingleOrDefault(l => l.Id == label.Id); if (crawledLabel is null) { return; } var oldName = crawledLabel.Name; UpdateLabel(label, crawledLabel); var newName = crawledLabel.Name; if (!string.Equals(oldName, newName, StringComparison.OrdinalIgnoreCase)) { var removedTrieTerms = new[] { $"label:{oldName}" }; var addedTrieTerms = new[] { $"label:{newName}" }; foreach (var issue in crawledRepo.Issues.Values) { RemoveTrieTerms(issue, removedTrieTerms); AddTrieTerms(issue, addedTrieTerms); } } _indexService.NotifyIndexChanged(); }
private void AddLabel(GitHubEventRepository repository, GitHubEventLabel label) { var index = _indexService.Index; if (index is null) { return; } var crawledRepo = index.Repos.SingleOrDefault(r => r.Id == repository.Id); if (crawledRepo is null) { return; } CreateLabel(crawledRepo, label); _indexService.NotifyIndexChanged(); }
private static void UpdateLabel(GitHubEventLabel label, CrawledLabel crawledLabel) { crawledLabel.ColorText = label.Color; crawledLabel.Description = label.Description; crawledLabel.Name = label.Name; }
protected override void ProcessLabelMessage(GitHubEventMessage message, GitHubEventRepository repository, GitHubEventLabel label, GitHubEventLabelAction action) { switch (action) { case GitHubEventLabelAction.Created: AddLabel(repository, label); break; case GitHubEventLabelAction.Edited: UpdateLabel(repository, label); break; case GitHubEventLabelAction.Deleted: RemoveLabel(repository, label); break; } }