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); }
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); }