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; }
public async Task CreateOrUpdatePullRequestState( [ActivityTrigger] PullRequestState state, [Table("PullRequestState")] CloudTable cloudTable, ILogger log) { TableOperation insertOrReplaceOperation = TableOperation.InsertOrReplace(state); await cloudTable.ExecuteAsync(insertOrReplaceOperation); }
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()) } }); }
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); }
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; }
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); } }
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); }
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); }
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}")); }
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); }