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 void UpdatePullRequestEffortKnowledgeMap(IEnumerable <PullRequestReviewerComment> pullRequestReviewComments) { foreach (var pullRequestReviewComment in pullRequestReviewComments) { PullRequestEffortKnowledgeMap.Add( CanononicalPathMapper.GetValueOrDefault(pullRequestReviewComment.Path), UsernameRepository.GetByGitHubLogin(pullRequestReviewComment.UserLogin), pullRequestReviewComment.CreatedAtDateTime); } }
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); } }
public unit_test_UsernameRepo() { //Setting up In memory dbs. userdb = new SqliteConnection("DataSource=:memory:"); passdb = new SqliteConnection("DataSource=:memory:"); walletdb = new SqliteConnection("DataSource=:memory:"); userdb.Open(); passdb.Open(); walletdb.Open(); var userbuild = new DbContextOptionsBuilder <UserModelContext>() .UseSqlite(userdb).Options; var passbuild = new DbContextOptionsBuilder <PassModelContext>() .UseSqlite(passdb).Options; var walletbuild = new DbContextOptionsBuilder <WalletContext>() .UseSqlite(walletdb).Options; var userContext = new UserModelContext(userbuild); var passContext = new PassModelContext(passbuild); var walletContext = new WalletContext(walletbuild); //Drop and create userContext.Database.EnsureDeleted(); userContext.Database.EnsureCreated(); passContext.Database.EnsureDeleted(); passContext.Database.EnsureCreated(); walletContext.Database.EnsureDeleted(); walletContext.Database.EnsureCreated(); //Seeding data to test on SeedUsers.seedUsers(userContext, passContext, walletContext); _uut = new UsernameRepository(userContext); }
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); } }
public void Initiate(Data.Commit[] commits, CommitBlobBlame[] commitBlobBlames, Developer[] developers, DeveloperContribution[] developersContributions, CommittedChange[] committedChanges, PullRequest[] pullRequests, PullRequestFile[] pullRequestFiles, IssueComment[] issueComments, PullRequestReviewer[] pullRequestReviewers, PullRequestReviewerComment[] pullRequestReviewComments, Dictionary <string, string> canononicalPathMapper, GitHubGitUser[] githubGitUsers, Period[] periods, int firstPeriod, string selectedReviewersType, int?minimumActualReviewersLength, IEnumerable <string> megaDevelopers) { _logger.LogInformation("{datetime}: Trying to initialize TimeMachine.", DateTime.Now); UsernameRepository = new UsernameRepository(githubGitUsers, developers); DevelopersContributions = developersContributions; PullRequestReviewComments = pullRequestReviewComments; CanononicalPathMapper = canononicalPathMapper; _events = GetSortedEvents(commits, pullRequests); CommitsDic = commits.ToDictionary(q => q.Sha); PeriodsDic = periods.ToDictionary(q => q.Id); GetDevelopersContributions(developers, developersContributions); DevelopersDic = developers.ToDictionary(q => q.NormalizedName); PullRequestsDic = pullRequests.ToDictionary(q => q.Number); PullRequestEffortKnowledgeMap = new PullRequestEffortKnowledgeMap(); BlameBasedKnowledgeMap = GetBlameBasedKnowledgeMap(commitBlobBlames); CommittedChangesDic = GetCommittedChangesDictionary(committedChanges); PullRequestFilesDic = GetPullRequestFilesDictionary(pullRequestFiles); PullRequestReviewersDic = GetPullRequestReviewersDictionary(pullRequestReviewers, pullRequestReviewComments, issueComments); _firstSimulationPeriod = firstPeriod; _selectedReviewersType = selectedReviewersType; _minimumActualReviewersLength = minimumActualReviewersLength ?? 0; _megaDevelopersSet = megaDevelopers.ToHashSet(); _logger.LogInformation("{datetime}: TimeMachine is initialized.", DateTime.Now); }