コード例 #1
0
ファイル: TimeMachine.cs プロジェクト: gangfan/RelationalGit
        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
            });
        }
コード例 #2
0
ファイル: TimeMachine.cs プロジェクト: fahimeh1368/SofiaWL
 private void UpdatePullRequestEffortKnowledgeMap(IEnumerable <PullRequestReviewerComment> pullRequestReviewComments)
 {
     foreach (var pullRequestReviewComment in pullRequestReviewComments)
     {
         PullRequestEffortKnowledgeMap.Add(
             CanononicalPathMapper.GetValueOrDefault(pullRequestReviewComment.Path),
             UsernameRepository.GetByGitHubLogin(pullRequestReviewComment.UserLogin),
             pullRequestReviewComment.CreatedAtDateTime);
     }
 }
コード例 #3
0
ファイル: TimeMachine.cs プロジェクト: fahimeh1368/SofiaWL
        private void AssignReviewerToPullRequest(string reviewerName, int prNumber, Dictionary <long, List <string> > prReviewers)
        {
            var prSubmitter = PullRequestsDic[prNumber].UserLogin;

            if (prSubmitter == reviewerName)
            {
                return;
            }

            if (!prReviewers.ContainsKey(prNumber))
            {
                prReviewers[prNumber] = new List <string>();
            }

            var reviewerNormalizedName = UsernameRepository.GetByGitHubLogin(reviewerName)?.NormalizedName;

            // Pull Request Reviewers and Comments contains duplicated items, So we need to check for it
            // https://api.github.com/repos/dotnet/coreclr/pulls/7886/reviews
            if (reviewerNormalizedName != null && !prReviewers[prNumber].Any(q => q == reviewerNormalizedName))
            {
                prReviewers[prNumber].Add(reviewerNormalizedName);
            }
        }
コード例 #4
0
ファイル: TimeMachine.cs プロジェクト: fahimeh1368/SofiaWL
        private void AddProposedChangesToPrSubmitterKnowledge(PullRequest pullRequest)
        {
            // we assume the PR submitter is the dev who has modified the files
            // however it's not the case always. for example https://github.com/dotnet/coreclr/pull/1
            // we assume all the proposed file changes are committed and owned by the main pull request's author
            // which may not be correct in rare scenarios

            if (pullRequest == null)
            {
                return;
            }

            var submitter = UsernameRepository.GetByGitHubLogin(pullRequest.UserLogin);

            // we have ignored mega developers
            if (submitter == null || _megaDevelopersSet.Contains(submitter.NormalizedName))
            {
                return;
            }

            // some of the pull requests have no modified files
            // https://github.com/dotnet/coreclr/pull/13534
            var pullRequestFiles = PullRequestFilesDic.GetValueOrDefault(pullRequest.Number, new List <PullRequestFile>());

            var prSubmitter = submitter.NormalizedName;

            var period = GetPeriodOfPullRequest(pullRequest);

            foreach (var file in pullRequestFiles)
            {
                var canonicalPath = CanononicalPathMapper.GetValueOrDefault(file.FileName);
                AssignKnowledgeToDeveloper(new Commit {
                    NormalizedAuthorName = prSubmitter, PeriodId = period.Id, Sha = pullRequest.MergeCommitSha, AuthorDateTime = pullRequest.MergedAtDateTime.Value
                }, file.ChangeKind, prSubmitter, period, canonicalPath);
            }
        }