private void AddIssueOrPullRequest(GitHubEventRepository repository, GitHubEventIssueOrPullRequest issueOrPullRequest) { 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 crawledIssue = new CrawledIssue(); crawledIssue.Id = issueOrPullRequest.Id; crawledIssue.Repo = crawledRepo; crawledIssue.Number = issueOrPullRequest.Number; crawledIssue.CreatedAt = issueOrPullRequest.CreatedAt; crawledIssue.CreatedBy = issueOrPullRequest.User.Login; crawledIssue.IsPullRequest = issueOrPullRequest is GitHubEventPullRequest; UpdateIssueOrPullRequest(repository, issueOrPullRequest, crawledIssue); crawledRepo.Issues[crawledIssue.Number] = crawledIssue; AddTrieTerms(crawledIssue, crawledIssue.GetTrieTerms()); _indexService.NotifyIndexChanged(); }
private void UpdateIssueOrPullRequest(GitHubEventRepository repository, GitHubEventIssueOrPullRequest issueOrPullRequest, CrawledIssue crawledIssue) { crawledIssue.IsOpen = issueOrPullRequest.State == "open"; crawledIssue.Title = issueOrPullRequest.Title; crawledIssue.IsLocked = issueOrPullRequest.Locked; crawledIssue.UpdatedAt = issueOrPullRequest.UpdatedAt; // TODO: Non-atomic write crawledIssue.ClosedAt = issueOrPullRequest.ClosedAt; // TODO: Non-atomic write crawledIssue.Assignees = issueOrPullRequest.Assignees.Select(a => a.Login).ToArray(); crawledIssue.Labels = issueOrPullRequest.Labels.Select(l => GetOrCreateLabel(repository, l)).ToArray(); crawledIssue.Milestone = GetOrCreateMilestone(repository, issueOrPullRequest.Milestone); if (issueOrPullRequest is GitHubEventPullRequest pullRequest) { crawledIssue.IsMerged = pullRequest.Merged; crawledIssue.IsDraft = pullRequest.Draft; } }