Exemple #1
0
        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
            });
        }
Exemple #2
0
        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());
        }
Exemple #3
0
        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);
        }