Пример #1
0
        public async Task <CommitsQueryResult> QueryCommits(DateTime @from, DateTime to)
        {
            string query  = $"changes/?q=before:{to:yyyy-MM-dd}+after:{from:yyyy-MM-dd}";
            var    result = await ReadGerritRequest(query);

            var gerritCommits = JArray.Parse(result).ToObject <List <Commit> >(_jsonSerializer);
            CommitsQueryResult commitsQueryResult = new CommitsQueryResult
            {
                Commits = gerritCommits.Select(gerritCommit =>
                {
                    var crawlerCommit = new Common.Crawler.Commit
                    {
                        AuthorId    = gerritCommit.Author.Id,
                        Deletions   = gerritCommit.Deletions,
                        Insertions  = gerritCommit.Insertions,
                        Id          = gerritCommit.Id,
                        Message     = gerritCommit.Message,
                        Created     = gerritCommit.Created,
                        ProjectName = gerritCommit.Project
                    };
                    return(crawlerCommit);
                }),
                QuerySizeExceeded = gerritCommits.Count >= 500
            };

            return(commitsQueryResult);
        }
Пример #2
0
        public async Task <CommitsQueryResult> QueryCommits(DateTime @from, DateTime to)
        {
            CommitsQueryResult cqr = new CommitsQueryResult();

            if (_projects == null)
            {
                string reposListQuery = $"orgs/{_orgName}/repos";
                var    response       = await _githubApiProvider.ReadRequest(reposListQuery);

                JArray jArray = JArray.Parse(response);
                _projects = jArray.ToObject <GithubProject[]>(_jsonSerializer);
            }
            var queryTasks = _projects.Where(x => x.Created <= to)
                             .Select(async x =>
            {
                var commitsUrl = x.CommitsUrl.Replace(@"{/sha}", "");
                var queryUrl   = commitsUrl + $"?since={@from:O}&until={to:O}";
                return(new

                {
                    Result = await _githubApiProvider.ReadRequest(queryUrl),
                    Repo = x
                });
            });
            var results = await Task.WhenAll(queryTasks);

            var tasks = results.Select(r => new
            {
                r.Repo,
                Commits = JArray.Parse(r.Result).ToObject <GithubCommit[]>(_jsonSerializer)
            }).Select(obj =>
            {
                var commits = obj.Commits.Select(c => new { obj.Repo.Name, c.Url });
                return(commits);
            })
                        .SelectMany(x => x)
                        .Select(async x =>
            {
                var githubCommit =
                    JObject.Parse(await _githubApiProvider.ReadRequest(x.Url)).ToObject <GithubCommit>(_jsonSerializer);
                var crawlerCommit         = githubCommit.ToModelCommit();
                crawlerCommit.ProjectName = x.Name;

                crawlerCommit.Author = new Author
                {
                    Id    = crawlerCommit.AuthorId,
                    Email = githubCommit.Commit.Author.Email,
                    Name  = githubCommit.Commit.Author.Name
                };
                return(crawlerCommit);
            });


            cqr.Commits = await Task.WhenAll(tasks);

            return(cqr);
        }