public async Task <string> Get(int repositoryId) { int MergedPRs = 0; double TotalDuration = 0; List <MergedPullRequest> DurationsOpened = new List <MergedPullRequest>(); PullRequestRequest request = new Octokit.PullRequestRequest { State = ItemStateFilter.All, SortDirection = SortDirection.Descending }; ApiOptions apiOptions = new Octokit.ApiOptions { PageSize = 100, PageCount = 1, StartPage = 1 }; try { var PullRequests = await this.Client.PullRequest.GetAllForRepository(repositoryId, request, apiOptions); foreach (PullRequest PullRequest in PullRequests) { if (PullRequest.MergedAt.HasValue && (PullRequest.Base.Ref == "development" || PullRequest.Base.Ref == "develop")) { var DurationOpened = PullRequest.MergedAt.Value.DateTime.Subtract(PullRequest.CreatedAt.DateTime); DurationsOpened.Add(new MergedPullRequest { id = PullRequest.Number, pr = PullRequest.HtmlUrl, sourceBranch = PullRequest.Head.Ref, author = PullRequest.User.Login, durationOpened = DurationOpened.TotalSeconds, additions = PullRequest.Additions, deletions = PullRequest.Deletions, merger = PullRequest.MergedBy != null ? PullRequest.MergedBy.Login : null }); TotalDuration += DurationOpened.TotalSeconds; } } DurationsOpened.Sort(delegate(MergedPullRequest c1, MergedPullRequest c2) { return(c1.durationOpened.CompareTo(c2.durationOpened)); }); return(JsonSerializer.Serialize(new MetricsResponse { averageDuration = TotalDuration / DurationsOpened.Count() / 3600, mergedRequests = DurationsOpened, numberMerged = DurationsOpened.Count(), nintiethPercentile = DurationsOpened.ElementAt(Convert.ToInt32(DurationsOpened.Count * .9)).durationOpened / 3600 })); } catch (Exception e) { System.Console.WriteLine(e.Message); return(JsonSerializer.Serialize("There was an error processing your request")); } }
public void ReturnsDefaultValuesForDefaultRequest() { var request = new PullRequestRequest(); var parameters = request.ToParametersDictionary(); Assert.Equal("open", parameters["state"]); }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> /// <returns>A <see cref="IReadOnlyList{PullRequest}"/> of <see cref="PullRequest"/>s which match the criteria</returns> public Task<IReadOnlyList<PullRequest>> GetAllForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(request, "request"); return GetAllForRepository(owner, name, request, ApiOptions.None); }
public async Task<IReadOnlyList<PullRequest>> PollGitHub(ItemState state = ItemState.Open) { var gitHubClient = new GitHubClient(new ProductHeaderValue("CalPEATS")); gitHubClient.Credentials = new Credentials("***email**", "******"); var openPullRequests = new PullRequestRequest {State = state }; var prs = await gitHubClient.PullRequest.GetAllForRepository("calicosol", "CalPEATS", openPullRequests); return prs; }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> /// <returns>A <see cref="IReadOnlyList{PullRequest}"/> of <see cref="PullRequest"/>s which match the criteria</returns> public Task<IReadOnlyList<PullRequest>> GetForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(request, "request"); return ApiConnection.GetAll<PullRequest>(ApiUrls.PullRequests(owner, name), request.ToParametersDictionary()); }
async Task<IReadOnlyList<PullRequest>> GetPullRequests (string productHeaderValue,string owner, string projectName) { var github = new GitHubClient (new ProductHeaderValue (productHeaderValue)); if(!string.IsNullOrEmpty(API_KEY)) github.Credentials = new Credentials(API_KEY); var filter = new PullRequestRequest() { State = ItemState.Closed }; return await github.Repository.PullRequest.GetAllForRepository(owner, projectName, filter); }
public async Task IgnoresOpenPullRequest() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var openPullRequests = new PullRequestRequest { State = ItemState.Closed }; var pullRequests = await _fixture.GetForRepository(Helper.UserName, _repository.Name, openPullRequests); Assert.Empty(pullRequests); }
public async Task<ActionResult> PRReviews(string ownerName, string repoName) { Ensure.NotNull(ownerName); Ensure.NotNull(repoName); var owner = await _githubClient.User.Get(ownerName); if (owner == null) { return HttpNotFound("owner not found"); } var repository = await _githubClient.Repository.Get(owner.Login, repoName); if (repository == null) { return HttpNotFound("repo not found"); } var request = new PullRequestRequest(); var results = new Dictionary<string, List<PullRequest>>(); var pullRequests = await _githubClient.PullRequest.GetAllForRepository(owner.Login, repository.Name, request); // for each pull request, get the files and associate with the pr number foreach (var pr in pullRequests) { var files = await _githubClient.PullRequest.Files(owner.Login, repository.Name, pr.Number); foreach (var file in files) { if (results.ContainsKey(file.FileName)) { results[file.FileName].Add(pr); } else { var list = new List<PullRequest> { pr }; results.Add(file.FileName, list); } } } var sortbyPopularity = results.OrderByDescending(kvp => kvp.Value.Count); var vm = new PullRequestReviewViewModel { Owner = owner, Repository = repository, PullRequests = sortbyPopularity }; return View(vm); }
public async Task CanGetOpenPullRequest() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var result = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var openPullRequests = new PullRequestRequest { State = ItemState.Open }; var pullRequests = await _fixture.GetForRepository(Helper.UserName, _repository.Name, openPullRequests); Assert.Equal(1, pullRequests.Count); Assert.Equal(result.Title, pullRequests[0].Title); }
public void ContainsSetValues() { var request = new PullRequestRequest { State = ItemStateFilter.Closed, Head = "user:ref-name", Base = "fake_base_branch" }; var parameters = request.ToParametersDictionary(); Assert.Equal("closed", parameters["state"]); Assert.Equal("user:ref-name", parameters["head"]); Assert.Equal("fake_base_branch", parameters["base"]); }
public Task <IReadOnlyList <PullRequest> > GetAllForRepository(long repositoryId, PullRequestRequest request) { Ensure.ArgumentNotNull(request, nameof(request)); return(GetAllForRepository(repositoryId, request, ApiOptions.None)); }
public Task <IReadOnlyList <PullRequest> > GetAllForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(request, nameof(request)); return(GetAllForRepository(owner, name, request, ApiOptions.None)); }
public async Task CanSortPullRequests() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var newPullRequest2 = new NewPullRequest("another pull request", otherBranchName, "master"); var anotherPullRequest = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest2); var updatePullRequest = new PullRequestUpdate { Body = "This is the body" }; await _fixture.Update(Helper.UserName, _repository.Name, pullRequest.Number, updatePullRequest); var sortPullRequestsByUpdated = new PullRequestRequest { SortProperty = PullRequestSort.Updated, SortDirection = SortDirection.Ascending }; var pullRequests = await _fixture.GetForRepository(Helper.UserName, _repository.Name, sortPullRequestsByUpdated); Assert.Equal(anotherPullRequest.Title, pullRequests[0].Title); var sortPullRequestsByLongRunning = new PullRequestRequest { SortProperty = PullRequestSort.LongRunning }; var pullRequestsByLongRunning = await _fixture.GetForRepository(Helper.UserName, _repository.Name, sortPullRequestsByLongRunning); Assert.Equal(pullRequest.Title, pullRequestsByLongRunning[0].Title); }
public async Task CanFindClosedPullRequest() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var updatePullRequest = new PullRequestUpdate { State = ItemState.Closed }; await _fixture.Update(Helper.UserName, _repository.Name, pullRequest.Number, updatePullRequest); var closedPullRequests = new PullRequestRequest { State = ItemState.Closed }; var pullRequests = await _fixture.GetForRepository(Helper.UserName, _repository.Name, closedPullRequests); Assert.Equal(1, pullRequests.Count); }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> /// <param name="options">Options for changing the API response</param> public Task<IReadOnlyList<PullRequest>> GetAllForRepository(long repositoryId, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNull(request, "request"); Ensure.ArgumentNotNull(options, "options"); return ApiConnection.GetAll<PullRequest>(ApiUrls.PullRequests(repositoryId), request.ToParametersDictionary(), options); }
private async static Task downloadPulls() { var prRequest = new PullRequestRequest { State = ItemState.All, SortDirection = SortDirection.Ascending, SortProperty = PullRequestSort.Created, }; var pulls = await _gitHub.PullRequest.GetAllForRepository(_owner, _repo, prRequest); Console.WriteLine("Pulls:"); List<ExpandoObject> myPullData = new List<ExpandoObject>(); foreach (var pull in pulls) { dynamic pullData = new ExpandoObject(); pullData.htmlUrl = pull.HtmlUrl; pullData.number = pull.Number; pullData.createdAt = pull.CreatedAt; pullData.closedAt = pull.ClosedAt; pullData.submitter = pull.User.Login; pullData.sha = pull.Head.Sha; pullData.branch = pull.Head.Label; pullData.title = pull.Title; Console.WriteLine($"{pull.Number} - {pull.Title}"); var prCommits = await _gitHub.PullRequest.Commits(_owner, _repo, pull.Number); List<ExpandoObject> myCommitData = new List<ExpandoObject>(); foreach (var prCommit in prCommits) { dynamic commitData = new ExpandoObject(); var commit = prCommit.Commit; commitData.sha = prCommit.Sha; commitData.message = commit.Message; commitData.createdAt = commit.Committer.Date; commitData.committer = commit.Committer.Name; myCommitData.Add(commitData); } pullData.commits = myCommitData; myPullData.Add(pullData); } var json = JsonConvert.SerializeObject(myPullData); var outputPath = Path.Combine(_targetPath, "pulls.json"); File.WriteAllText(outputPath, json); }
public async Task ReturnsDistinctPullRequestsBasedOnStartPageParameterized() { await CreateTheWorld(); var newPullRequest1 = new NewPullRequest("a pull request 1", branchName, "master"); var newPullRequest2 = new NewPullRequest("a pull request 2", otherBranchName, "master"); await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest1); await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest2); var openPullRequests = new PullRequestRequest { State = ItemStateFilter.Open }; var startOptions = new ApiOptions { PageSize = 1, PageCount = 1 }; var firstPage = await _fixture.GetAllForRepository(_context.RepositoryOwner, _context.RepositoryName, openPullRequests, startOptions); var skipStartOptions = new ApiOptions { PageSize = 1, PageCount = 1, StartPage = 2 }; var secondPage = await _fixture.GetAllForRepository(_context.RepositoryOwner, _context.RepositoryName, openPullRequests, skipStartOptions); Assert.NotEqual(firstPage[0].Title, secondPage[0].Title); }
public async Task ReturnsCorrectCountOfPullRequestsWithStartParameterized() { await CreateTheWorld(); var newPullRequest1 = new NewPullRequest("a pull request 1", branchName, "master"); var newPullRequest2 = new NewPullRequest("a pull request 2", otherBranchName, "master"); await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest1); var result = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest2); var options = new ApiOptions { PageSize = 1, PageCount = 1, StartPage = 1 }; var openPullRequests = new PullRequestRequest { State = ItemStateFilter.Open }; var pullRequests = await _fixture.GetAllForRepository(Helper.UserName, _context.RepositoryName, openPullRequests, options); Assert.Equal(1, pullRequests.Count); Assert.Equal(result.Title, pullRequests[0].Title); }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> /// <param name="options">Options for changing the API response</param> public Task <IReadOnlyList <PullRequest> > GetAllForRepository(long repositoryId, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNull(request, "request"); Ensure.ArgumentNotNull(options, "options"); return(ApiConnection.GetAll <PullRequest>(ApiUrls.PullRequests(repositoryId), request.ToParametersDictionary(), options)); }
public Task <IReadOnlyList <PullRequest> > GetAllForRepository(string owner, string name, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNullOrEmptyString(owner, nameof(owner)); Ensure.ArgumentNotNullOrEmptyString(name, nameof(name)); Ensure.ArgumentNotNull(request, nameof(request)); Ensure.ArgumentNotNull(options, nameof(options)); return(ApiConnection.GetAll <PullRequest>(ApiUrls.PullRequests(owner, name), request.ToParametersDictionary(), AcceptHeaders.DraftPullRequestApiPreview, options)); }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> /// <returns>A <see cref="IReadOnlyList{PullRequest}"/> of <see cref="PullRequest"/>s which match the criteria</returns> public Task <IReadOnlyList <PullRequest> > GetForRepository(string owner, string name, PullRequestRequest request) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(request, "request"); return(ApiConnection.GetAll <PullRequest>(ApiUrls.PullRequests(owner, name), request.ToParametersDictionary())); }
public Task <IReadOnlyList <PullRequest> > GetAllForRepository(long repositoryId, PullRequestRequest request, ApiOptions options) { Ensure.ArgumentNotNull(request, nameof(request)); Ensure.ArgumentNotNull(options, nameof(options)); return(ApiConnection.GetAll <PullRequest>(ApiUrls.PullRequests(repositoryId), request.ToParametersDictionary(), AcceptHeaders.DraftPullRequestApiPreview, options)); }
/// <summary> /// Query pull requests for the repository based on criteria /// </summary> /// <remarks> /// http://developer.github.com/v3/pulls/#list-pull-requests /// </remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="request">Used to filter and sort the list of pull requests returned</param> public Task<IReadOnlyList<PullRequest>> GetAllForRepository(long repositoryId, PullRequestRequest request) { Ensure.ArgumentNotNull(request, "request"); return GetAllForRepository(repositoryId, request, ApiOptions.None); }