コード例 #1
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(true))
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequests");
                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                var pullRequests    = await githubExtractor.FetchAllPullRequests(owner, repo).ConfigureAwait(false);

                _logger.LogInformation("{datetime}: trying to save {count} pull requests.", DateTime.Now, pullRequests.Length);
                foreach (PullRequest pullrequest in pullRequests)
                {
                    var startdate = pullrequest.CreatedAtDateTime;
                    var enddate   = pullrequest.ClosedAtDateTime;
                    var overlap   = pullRequests.Where(a => a.ClosedAtDateTime > startdate && a.CreatedAtDateTime < enddate && a.Number != pullrequest.Number).ToList();
                    foreach (PullRequest item in overlap)
                    {
                        if (item.Number < pullrequest.Number)
                        {
                            pullrequest.OverlapPullRequest = string.Concat(pullrequest.OverlapPullRequest, item.Number.ToString() + ",");
                        }
                    }
                }
                dbContext.AddRange(pullRequests);
                dbContext.SaveChanges();
                _logger.LogInformation("{datetime}: pull requests has been saved successfully.", DateTime.Now);
            }
        }
コード例 #2
0
        public async Task Execute(string token, string agenName, string owner, string repo)
        {
            using (var dbContext = new GitRepositoryDbContext())
            {
                var commitAuthors = await dbContext.Commits
                                    .FromSql(@"select c1.* from Commits as c1
                INNER JOIN (select NormalizedAuthorName,AuthorName,max(AuthorDateTime) as AuthorDateTime from Commits
                group by NormalizedAuthorName,AuthorName) as c2 on c1.AuthorDateTime=c2.AuthorDateTime
                and c1.NormalizedAuthorName=c2.NormalizedAuthorName
                and c1.AuthorName=c2.AuthorName")
                                    .ToArrayAsync().ConfigureAwait(false);

                _logger.LogInformation("{datetime}: fetching corresponding GitHub user of {count} git authors.", DateTime.Now, commitAuthors.Length);

                var github = new GithubDataFetcher(token, agenName, _logger);

                foreach (var commitAuthor in commitAuthors)
                {
                    var commit = await github.GetCommit(owner, repo, commitAuthor.Sha).ConfigureAwait(false);

                    // Github does not return the author for some of the old Commits
                    dbContext.Add(new GitHubGitUser
                    {
                        GitUsername           = commitAuthor.AuthorName,
                        GitHubUsername        = commit.Author?.Login,
                        GitNormalizedUsername = commitAuthor.NormalizedAuthorName
                    });
                }

                await dbContext.SaveChangesAsync().ConfigureAwait(false);

                _logger.LogInformation("{datetime}: corresponding GitHub users have been saved successfully.", DateTime.Now);
            }
        }
コード例 #3
0
        public async Task Execute(string token, string agenName, string owner, string repo)
        {
            using (var dbContext = new GitRepositoryDbContext())
            {
                var loadedIssues    = dbContext.Issue.ToArray();
                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                var issueEvents     = await githubExtractor.GetIssueEvents(owner, repo, loadedIssues).ConfigureAwait(false);

                dbContext.AddRange(issueEvents);
                dbContext.SaveChanges();
            }
        }
コード例 #4
0
        public async Task Execute(string token, string agenName, string owner, string repo, string[] labels, string state = "All")
        {
            using (var dbContext = new GitRepositoryDbContext())
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE Issue");
                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                var issues          = await githubExtractor.GetIssues(owner, repo, labels, state).ConfigureAwait(false);

                dbContext.AddRange(issues);
                dbContext.SaveChanges();
            }
        }
コード例 #5
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(true))
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequests");
                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                var pullRequests    = await githubExtractor.FetchAllPullRequests(owner, repo).ConfigureAwait(false);

                _logger.LogInformation("{datetime}: trying to save {count} pull requests.", DateTime.Now, pullRequests.Length);
                dbContext.AddRange(pullRequests);
                dbContext.SaveChanges();
                _logger.LogInformation("{datetime}: pull requests has been saved successfully.", DateTime.Now);
            }
        }
コード例 #6
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(false))
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequestReviewerComments");
                var githubExtractor             = new GithubDataFetcher(token, agenName, _logger);
                var pullRequestReviewerComments = await githubExtractor.FetchPullRequestReviewerCommentsFromRepository(owner, repo).ConfigureAwait(false);

                _logger.LogInformation("{datetime}: saving {count} review comments  into database.", DateTime.Now, pullRequestReviewerComments.Length);

                dbContext.BulkInsert(pullRequestReviewerComments, new BulkConfig {
                    BatchSize = 50000, BulkCopyTimeout = 0
                });

                _logger.LogInformation("{datetime}: {count} review comments have been saved into database.", DateTime.Now, pullRequestReviewerComments.Length);
            }
        }
コード例 #7
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(true))
            {
                var loadedPullRequests = await dbContext.PullRequests.FromSql(@"select * from PullRequests WHERE Merged=1 and MergeCommitSha not in (select Sha from Commits)")
                                         .ToArrayAsync().ConfigureAwait(false);

                _logger.LogInformation("{datetime}: there are {count} pull requests with no corresponding merged commit", DateTime.Now, loadedPullRequests.Length);

                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                await githubExtractor.MergeEvents(owner, repo, loadedPullRequests).ConfigureAwait(false);

                await dbContext.SaveChangesAsync().ConfigureAwait(false);

                _logger.LogInformation("{datetime}: corresponding merged commits has been resolved and saved.", DateTime.Now);
            }
        }
コード例 #8
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(false))
            {
                var loadedPullRequests = await dbContext.PullRequests.ToArrayAsync().ConfigureAwait(false);

                var githubExtractor = new GithubDataFetcher(token, agenName, _logger);
                var files           = await githubExtractor.FetchFilesOfPullRequests(owner, repo, loadedPullRequests).ConfigureAwait(false);

                _logger.LogInformation("{datetime}: saving {count} pull request files into database.", DateTime.Now, files.Length);

                dbContext.BulkInsert(files, new BulkConfig {
                    BatchSize = 50000, BulkCopyTimeout = 0
                });


                _logger.LogInformation("{datetime}: pull request files have been saved successfully.", DateTime.Now, loadedPullRequests.Length);
            }
        }
コード例 #9
0
        public async Task Execute(string token, string agentName)
        {
            using (var dbContext = new GitRepositoryDbContext())
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE Users");
                var unknownUsers = dbContext.Users
                                   .FromSql(@"Select UserLogin,null AS Name, NULL as Email from (
                            select distinct(UserLogin) AS UserLogin from PullRequests  WHERE UserLogin IS NOT null
                            union   
                            select distinct(UserLogin) AS UserLogin from PullRequestReviewers  WHERE UserLogin IS NOT null
                            union   
                            select distinct(UserLogin) from PullRequestReviewerComments WHERE UserLogin IS NOT null) AS Temp")
                                   .ToArray();

                var githubExtractor = new GithubDataFetcher(token, agentName, _logger);
                await githubExtractor.GetUsers(unknownUsers).ConfigureAwait(false);

                dbContext.AddRange(unknownUsers);
                await dbContext.SaveChangesAsync().ConfigureAwait(false);
            }
        }
コード例 #10
0
        public async Task Execute(string token, string agenName, string owner, string repo, string branch)
        {
            using (var dbContext = new GitRepositoryDbContext(false))
            {
                dbContext.Database.ExecuteSqlCommand($"TRUNCATE TABLE PullRequestReviewers");

                var pullRequests = await dbContext.PullRequests.AsNoTracking()
                                   .OrderBy(q => q.Number)
                                   .ToArrayAsync().ConfigureAwait(false);

                _logger.LogInformation("{datetime}: trying to fetch all the assigned reviewers for all {count} pull requests.", DateTime.Now, pullRequests.Length);

                var githubExtractor    = new GithubDataFetcher(token, agenName, _logger);
                var pullRequestReviews = await githubExtractor.FetchReviewersOfPullRequests(owner, repo, pullRequests).ConfigureAwait(false);

                _logger.LogInformation("{datetime}: trying to save {count} reviewers into database.", DateTime.Now, pullRequestReviews.Length);

                dbContext.BulkInsert(pullRequestReviews, new BulkConfig {
                    BatchSize = 50000, BulkCopyTimeout = 0
                });

                _logger.LogInformation("{datetime}: reviewers has been save successfully.", DateTime.Now, pullRequestReviews.Length);
            }
        }