private PullRequestContext GetPullRequestContext(PullRequest pullRequest, KnowledgeDistributionMap knowledgeMap) { var pullRequestFiles = PullRequestFilesDic.GetValueOrDefault(pullRequest.Number, new List <PullRequestFile>()).ToArray(); var period = GetPeriodOfPullRequest(pullRequest); var availableDevelopers = GetAvailableDevelopersOfPeriod(pullRequest) .ToArray(); var prSubmitter = UsernameRepository.GetByGitHubLogin(pullRequest.UserLogin); var pullRequestKnowledgeableDevelopers = GetPullRequestKnowledgeables(pullRequestFiles, knowledgeMap, period); var actualReviewers = GetKnowledgeOfActualReviewers(PullRequestReviewersDic.GetValueOrDefault(pullRequest.Number) ?? new List <string>(0), pullRequestKnowledgeableDevelopers); return(new PullRequestContext() { SelectedReviewersType = _selectedReviewersType, PRSubmitterNormalizedName = prSubmitter?.NormalizedName, ActualReviewers = actualReviewers.ToArray(), PullRequestFiles = pullRequestFiles, AvailableDevelopers = availableDevelopers, PullRequest = pullRequest, KnowledgeMap = knowledgeMap, CanononicalPathMapper = CanononicalPathMapper, PullRequestPeriod = period, Periods = this.PeriodsDic, Developers = new ReadOnlyDictionary <string, Developer>(DevelopersDic), Blames = BlameBasedKnowledgeMap.GetSnapshopOfPeriod(period.Id), PullRequestKnowledgeables = pullRequestKnowledgeableDevelopers }); }
private DeveloperKnowledge[] GetPullRequestKnowledgeables(PullRequestFile[] pullRequestFiles, KnowledgeDistributionMap knowledgeDistributionMap, Period period) { var developersKnowledge = new Dictionary <string, DeveloperKnowledge>(); var blameSnapshot = BlameBasedKnowledgeMap.GetSnapshopOfPeriod(period.Id); foreach (var file in pullRequestFiles) { AddFileOwnership(knowledgeDistributionMap, blameSnapshot, developersKnowledge, file.FileName, CanononicalPathMapper); } return(developersKnowledge.Values.ToArray()); }
private BlameBasedKnowledgeMap GetBlameBasedKnowledgeMap(CommitBlobBlame[] commitBlobBlames) { var blameBasedKnowledgeMap = new BlameBasedKnowledgeMap(); foreach (var commitBlobBlame in commitBlobBlames) { var commit = CommitsDic.GetValueOrDefault(commitBlobBlame.CommitSha); var periodId = commit.PeriodId.Value; var period = PeriodsDic[periodId]; var filePath = commitBlobBlame.CanonicalPath; var devName = commitBlobBlame.NormalizedDeveloperIdentity; blameBasedKnowledgeMap.Add(period, filePath, devName, commitBlobBlame); } blameBasedKnowledgeMap.ComputeOwnershipPercentage(); return(blameBasedKnowledgeMap); }