コード例 #1
0
        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"));
            }
        }
コード例 #2
0
        public void ReturnsDefaultValuesForDefaultRequest()
        {
            var request = new PullRequestRequest();

            var parameters = request.ToParametersDictionary();

            Assert.Equal("open", parameters["state"]);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
 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;
 }
コード例 #5
0
        /// <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());
        }
コード例 #6
0
		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);
		}
コード例 #7
0
    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);
    }
コード例 #8
0
ファイル: HomeController.cs プロジェクト: hahmed/Sprint
        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);
        }
コード例 #9
0
    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);
    }
コード例 #10
0
        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"]);
        }
コード例 #11
0
        public Task <IReadOnlyList <PullRequest> > GetAllForRepository(long repositoryId, PullRequestRequest request)
        {
            Ensure.ArgumentNotNull(request, nameof(request));

            return(GetAllForRepository(repositoryId, request, ApiOptions.None));
        }
コード例 #12
0
        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));
        }
コード例 #13
0
    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);
    }
コード例 #14
0
    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);
    }
コード例 #15
0
        /// <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);
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: AmadeusW/GitTimeline
 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);
 }
コード例 #17
0
    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);
    }
コード例 #18
0
    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);
    }
コード例 #19
0
        /// <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));
        }
コード例 #20
0
        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));
        }
コード例 #21
0
        /// <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()));
        }
コード例 #22
0
        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));
        }
コード例 #23
0
        /// <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);
        }