Example #1
0
 public PullRequest(
     string accountName,
     string baseRef,
     DateTime changedStateDate,
     IUser createdBy,
     long id,
     string projectOrOwner,
     string repoName,
     IEnumerable <IUserWithVote> reviewers,
     PullRequestState status,
     string title,
     string url)
 {
     this.AccountName      = accountName;
     this.BaseRef          = baseRef;
     this.changedStateDate = changedStateDate;
     this.CreatedBy        = createdBy;
     this.ID             = id;
     this.ProjectOrOwner = projectOrOwner;
     this.RepoName       = repoName;
     this.Reviewers      = reviewers;
     this.Status         = status;
     this.Title          = title;
     this.Url            = url;
 }
Example #2
0
 public async Task CreateOrUpdatePullRequestState(
     [ActivityTrigger] PullRequestState state,
     [Table("PullRequestState")] CloudTable cloudTable,
     ILogger log)
 {
     TableOperation insertOrReplaceOperation = TableOperation.InsertOrReplace(state);
     await cloudTable.ExecuteAsync(insertOrReplaceOperation);
 }
Example #3
0
 public override OptionSet CreateOptions()
 {
     return(new OptionSet()
     {
         { "repository=", "repository (multiple allowed)", v => Repositories.Add(v) },
         { "user="******"filter to user", v => User = v },
         { "state=", "filter to state (default is open)", v => State = (PullRequestState)Enum.Parse(typeof(PullRequestState), v.ToUpper()) }
     });
 }
Example #4
0
        public async Task <ResponseWrapper <PullRequest> > Get(string projectKey, string repositorySlug, RequestOptions options = null, Direction direction = Direction.INCOMING,
                                                               PullRequestState state = PullRequestState.OPEN, bool withAttributes = true, bool withProperties = true)
        {
            string requestUrl = UrlBuilder.ToRestApiUrl(string.Format(PULL_REQUEST, projectKey, repositorySlug))
                                .WithOptions(options)
                                .WithQueryParam("direction", direction.ToString())
                                .WithQueryParam("state", state.ToString())
                                .WithQueryParam("withAttributes", withAttributes.ToString())
                                .WithQueryParam("withProperties", withProperties.ToString());

            var pr = await _httpWorker.GetAsync <ResponseWrapper <PullRequest> >(requestUrl).ConfigureAwait(false);

            return(pr);
        }
Example #5
0
        public async Task<ResponseWrapper<PullRequest>> Get(string projectKey, string repositorySlug, RequestOptions options = null, Direction direction = Direction.INCOMING,
            PullRequestState state = PullRequestState.OPEN, bool withAttributes = true, bool withProperties = true)
        {
            string requestUrl = UrlBuilder.ToRestApiUrl(string.Format(PULL_REQUEST, projectKey, repositorySlug))
                                          .WithOptions(options)
                                          .WithQueryParam("direction", direction.ToString())
                                          .WithQueryParam("state", state.ToString())
                                          .WithQueryParam("withAttributes", withAttributes.ToString())
                                          .WithQueryParam("withProperties", withProperties.ToString());

            var pr = await _httpWorker.GetAsync<ResponseWrapper<PullRequest>>(requestUrl).ConfigureAwait(false);

            return pr;

        }
Example #6
0
        static void GetPullRequestsForOrg(string org, PullRequestState state)
        {
            try
            {
                var repoClient = new RepositoryClient(_userAgent);
                var repoTask   = repoClient.GetAllRepositoriesByOwnerAsync(org);
                Task.WaitAll(repoTask);

                var pullReqClient = new PullRequestClient(_userAgent);
                var parms         = new PullRequestOptions
                {
                    State       = state,
                    PageOptions = new PaginationOptions {
                        ResultsPerPage = 100
                    }
                };

                var tasks = new List <Task <List <PullRequestResponse> > >();
                Parallel.ForEach(repoTask.Result, repo =>
                {
                    var pullReqTask = pullReqClient.GetPullRequestsAsync(org, repo.Name, parms);
                    tasks.Add(pullReqTask);
                });
                Task.WaitAll(tasks.ToArray());

                var pullRequestsForOrg = new List <PullRequestResponse>();
                foreach (var task in tasks)
                {
                    pullRequestsForOrg.AddRange(task.Result);
                }

                Console.WriteLine(pullRequestsForOrg.Count);
            }
            catch (Exception ex)
            {
                if (ex is AggregateException aggEx)
                {
                    ex = ex.InnerException;
                }
                Console.WriteLine(ex.Message, ex);
            }
            finally
            {
                Console.Read();
            }
        }
        public static PullRequestStateEnum FromGraphQl(this PullRequestState value)
        {
            switch (value)
            {
            case PullRequestState.Open:
                return(PullRequestStateEnum.Open);

            case PullRequestState.Closed:
                return(PullRequestStateEnum.Closed);

            case PullRequestState.Merged:
                return(PullRequestStateEnum.Merged);

            default:
                throw new ArgumentOutOfRangeException(nameof(value), value, null);
            }
        }
Example #8
0
        public PullRequestListViewModel(
            string username, string repository, PullRequestState state,
            IApplicationService applicationService = null)
        {
            applicationService = applicationService ?? Locator.Current.GetService <IApplicationService>();

            var pullRequests = new ReactiveList <PullRequest>(resetChangeThreshold: 10);

            Items = pullRequests.CreateDerivedCollection(
                pullRequest =>
            {
                var avatar = new Avatar(pullRequest.Author?.Links?.Avatar?.Href);
                var vm     = new PullRequestItemViewModel(pullRequest.Title, avatar, pullRequest.CreatedOn.Humanize());
                vm.GoToCommand
                .Select(_ => pullRequest)
                .Subscribe(_selectSubject);
                return(vm);
            },
                x => x.Title.ContainsKeyword(SearchText),
                signalReset: this.WhenAnyValue(x => x.SearchText));

            string nextPage = null;

            HasMoreItems = true;

            LoadMoreCommand = ReactiveCommand.CreateFromTask(async _ =>
            {
                if (nextPage == null)
                {
                    var x = await applicationService.Client.PullRequests.GetAll(username, repository, state);
                    pullRequests.Reset(x.Values);
                    nextPage = x.Next;
                }
                else
                {
                    var x = await applicationService.Client.Get <Collection <PullRequest> >(nextPage);
                    pullRequests.AddRange(x.Values);
                    nextPage = x.Next;
                }

                HasMoreItems = nextPage != null;
            }, this.WhenAnyValue(x => x.HasMoreItems));

            LoadMoreCommand.IsExecuting.CombineLatest(pullRequests.IsEmptyChanged, (x, y) => !x && y)
            .ToProperty(this, x => x.IsEmpty, out _isEmpty);
        }
        public async Task <IEnumerable <IPullRequest> > GetPullRequestsAsync(PullRequestState status, string userUniqueId = null)
        {
            PullRequestRequest request = new PullRequestRequest {
                State = GitHubPullRequestServices.ConvertToGitHubStateFilter(status)
            };

            IReadOnlyList <PullRequest> pullRequests = await this.client.PullRequest.GetAllForRepository(this.owner, this.repoName, request);

            List <IPullRequest> trackerPullRequests = new List <IPullRequest>();

            foreach (PullRequest pullRequest in pullRequests)
            {
                IReadOnlyList <PullRequestReview> reviews = await this.client.PullRequest.Review.GetAll(this.owner, this.repoName, pullRequest.Number);

                // Want to exclude anything that the user has approved
                if (!string.IsNullOrEmpty(userUniqueId) && reviews.Any(review => review.User.Login == userUniqueId && review.State.Value == PullRequestReviewState.Approved))
                {
                    continue;
                }

                DateTime    changeStateDate           = pullRequest.State.Value == ItemState.Closed ? pullRequest.ClosedAt.Value.DateTime : pullRequest.UpdatedAt.DateTime;
                Models.User createdBy                 = new Models.User(pullRequest.User.AvatarUrl, pullRequest.User.Login);
                IEnumerable <IUserWithVote> reviewers = reviews.Select(review => new Models.UserWithVote(review.User.AvatarUrl, review.User.Login, GitHubPullRequestServices.ConvertToTrackerVote(review.State)));

                Models.PullRequest trackerPullRequest = new Models.PullRequest(
                    null,
                    pullRequest.Base.Ref,
                    changeStateDate,
                    createdBy,
                    pullRequest.Number,
                    this.owner,
                    this.repoName,
                    reviewers,
                    pullRequest.State.Value == ItemState.Open ? PullRequestState.Open : PullRequestState.Closed,
                    pullRequest.Title,
                    pullRequest.Url);

                trackerPullRequests.Add(trackerPullRequest);
            }

            return(trackerPullRequests);
        }
        private static PullRequestStatus?ConvertToAzDOStatus(PullRequestState status)
        {
            PullRequestStatus?azDOStatus = null;

            switch (status)
            {
            case PullRequestState.All:
                azDOStatus = PullRequestStatus.All;
                break;

            case PullRequestState.Closed:
                azDOStatus = PullRequestStatus.Completed;
                break;

            case PullRequestState.Open:
                azDOStatus = PullRequestStatus.Active;
                break;
            }

            return(azDOStatus);
        }
        private static ItemStateFilter ConvertToGitHubStateFilter(PullRequestState status)
        {
            ItemStateFilter filter = ItemStateFilter.All;

            switch (status)
            {
            case PullRequestState.All:
                filter = ItemStateFilter.All;
                break;

            case PullRequestState.Closed:
                filter = ItemStateFilter.Closed;
                break;

            case PullRequestState.Open:
                filter = ItemStateFilter.Open;
                break;
            }

            return(filter);
        }
        public async Task <IEnumerable <IPullRequest> > GetPullRequestsAsync(PullRequestState status, string userUniqueId = null)
        {
            IEnumerable <GitPullRequest> pullRequests = await this.client.GetPullRequestsByProjectAsync(this.project, new GitPullRequestSearchCriteria()
            {
                RepositoryId = this.repo.Id, Status = AzureDevOpsPullRequestServices.ConvertToAzDOStatus(status)
            });

            List <IPullRequest> trackerPullRequests = new List <IPullRequest>();

            foreach (GitPullRequest pullRequest in pullRequests)
            {
                // Want to exclude anything that the user has approved
                if (!string.IsNullOrEmpty(userUniqueId) && pullRequest.Reviewers.Any(reviewer => reviewer.UniqueName == userUniqueId && reviewer.Vote > 0))
                {
                    continue;
                }

                DateTime changedStateDate             = pullRequest.Status == PullRequestStatus.Completed || pullRequest.Status == PullRequestStatus.Abandoned ? pullRequest.ClosedDate : pullRequest.CreationDate;
                User     createdBy                    = new User(pullRequest.CreatedBy.ImageUrl, pullRequest.CreatedBy.DisplayName);
                IEnumerable <IUserWithVote> reviewers = pullRequest.Reviewers.Select(reviewer => new UserWithVote(reviewer.ImageUrl, reviewer.DisplayName, AzureDevOpsPullRequestServices.ConvertToTrackerVote(reviewer.Vote)));

                PullRequest trackerPullRequest = new PullRequest(
                    this.clientContext.AccountName,
                    pullRequest.TargetRefName,
                    changedStateDate,
                    createdBy,
                    pullRequest.PullRequestId,
                    this.project,
                    this.repo.Name,
                    reviewers,
                    AzureDevOpsPullRequestServices.ConvertToTrackerState(pullRequest.Status),
                    pullRequest.Title,
                    pullRequest.Url);

                trackerPullRequests.Add(trackerPullRequest);
            }

            return(trackerPullRequests);
        }
        private static PullRequestState ConvertToTrackerState(PullRequestStatus status)
        {
            PullRequestState trackerState = PullRequestState.Open;

            switch (status)
            {
            case PullRequestStatus.NotSet:
            case PullRequestStatus.Active:
                trackerState = PullRequestState.Open;
                break;

            case PullRequestStatus.Abandoned:
            case PullRequestStatus.Completed:
                trackerState = PullRequestState.Closed;
                break;

            case PullRequestStatus.All:
                trackerState = PullRequestState.All;
                break;
            }

            return(trackerState);
        }
Example #14
0
        private PullRequestViewModel GetCompletedPullRequest(Guid author, Guid repository, DateTime start, DateTime end, bool createdInThePast = false, PullRequestState state = PullRequestState.Completed)
        {
            var pr = GetPullRequest(author, repository, start, end, createdInThePast);

            pr.State     = state;
            pr.Completed = Generator.Next(start, end);
            return(pr);
        }
Example #15
0
        public Task <Collection <PullRequest> > GetAll(string username, string repository, PullRequestState state, int pagelen = 50)
        {
            var uri = $"{BitbucketClient.ApiUrl2}/repositories/{Uri.EscapeDataString(username)}/{Uri.EscapeDataString(repository)}/pullrequests";

            return(_client.Get <Collection <PullRequest> >($"{uri}?state={state.ToString().ToUpper()}&pagelen={pagelen}"));
        }
Example #16
0
        private static Dictionary <string, List <PullRequest> > GetPullRequests(List <string> repositories, PullRequestState state = PullRequestState.OPEN, string filterToUser = null)
        {
            var bitbucket = Program.ConnectToBitBucket();

            var tasksToWaitFor = repositories
                                 .ToDictionary(r => r, r => {
                string project;
                string repo;
                Utils.SplitRepositoryReference(r, out project, out repo);
                return(bitbucket.PullRequests.Get(project, repo, Program.DefaultRequestOptions, state: state));
            });

            var pullRequests = tasksToWaitFor.ToDictionary(
                r => r.Key,
                t => t.Value.Result.Values.Where(
                    pr => filterToUser == null ||
                    (pr.Author?.User?.EmailAddress?.EqualsIgnoreCase(filterToUser) ?? false)
                    ).ToList()
                );

            return(pullRequests);
        }