public async Task CannotBeMergedDueNotInMergeableState() { await CreateTheWorld(); var master = await _github.Git.Reference.Get(Helper.UserName, _context.RepositoryName, "heads/master"); var newMasterTree = await CreateTree(new Dictionary <string, string> { { "README.md", "Hello World, we meet again!" } }); var masterCommit = await CreateCommit("Commit in master", newMasterTree.Sha, master.Object.Sha); await _github.Git.Reference.Update(Helper.UserName, _context.RepositoryName, "heads/master", new ReferenceUpdate(masterCommit.Sha)); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); await Task.Delay(TimeSpan.FromSeconds(5)); var updatedPullRequest = await _fixture.Get(Helper.UserName, _context.RepositoryName, pullRequest.Number); Assert.False(updatedPullRequest.Mergeable); var merge = new MergePullRequest { Sha = pullRequest.Head.Sha }; var ex = await Assert.ThrowsAsync <PullRequestNotMergeableException>(() => _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge)); Assert.True(ex.Message.Equals("Pull Request is not mergeable")); }
public bool MergePullRequest(int pullRequestNumber, string mergeCommitMessage) { try { var client = CreateGitHubClient(); _logger.LogDebug("Trying to merge pull request number {pullRequestNumber}", pullRequestNumber); var mergePullRequestModel = new MergePullRequest() { MergeMethod = PullRequestMergeMethod.Merge, CommitMessage = mergeCommitMessage }; var pullRequestMerge = client.PullRequest.Merge(_repositoryOwner, _repositoryName, pullRequestNumber, mergePullRequestModel).Result; _logger.LogDebug("Pull request {pullRequestNumber} successfully merged", pullRequestNumber); return(true); } catch (AggregateException e) when(e.InnerExceptions.OfType <PullRequestNotMergeableException>().Any()) { var ex = e.InnerExceptions.OfType <PullRequestNotMergeableException>().First(); _logger.LogDebug("Pull request {pullRequestNumber} has not been merged because it is not mergeable. GitHub error message: {gitHubErrorMessage} {apiErrors}", pullRequestNumber, ex.Message, ex.ApiError?.Errors); return(false); } }
/// <inheritdoc /> public async Task <IMessageHandler> MergePrAsync(Options options) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (this.GitHubClient == null) { throw new InvalidOperationException("GitHubClient Not Found"); } var mpr = new MergePullRequest() .WithCommitTitle(options.CommitTitle) .WithCommitMessage(options.CommitMessage) .WithSha(this.Sha) .WithMergeMethod(options.MergeMethod); var result = await this.GitHubClient .PullRequest .Merge(options.Owner, options.Repository, options.IssueId, mpr) .ConfigureAwait(false); this.IsMerged = result.Merged; return(this); }
public void Given_Null_Parameters_When_WithMergeMethod_Invoked_Then_It_Return_Value(PullRequestMergeMethod value, PullRequestMergeMethod expected) { var mpr = new MergePullRequest(); var result = MergePullRequestExtensions.WithMergeMethod(mpr, value); result.MergeMethod.Should().Be(expected); }
public void Given_Null_Parameters_When_WithSha_Invoked_Then_It_Return_Value(string value, string expected) { var mpr = new MergePullRequest(); var result = MergePullRequestExtensions.WithSha(mpr, value); result.Sha.Should().BeEquivalentTo(expected); }
public void Given_Null_Parameters_When_WithMergeMethod_Invoked_Then_It_Throws_Exception() { var mpr = new MergePullRequest(); Action action = () => MergePullRequestExtensions.WithMergeMethod(null, PullRequestMergeMethod.Merge); action.Should().Throw <ArgumentNullException>(); }
public async Task MergePullRequest(String branch, int prNum) { MergePullRequest mpr = new MergePullRequest(); mpr.CommitMessage = String.Format("Merging branch {0} Timestamp: {1}", branch, DateTime.Now); mpr.CommitTitle = String.Format("Merge pullrequest for {0}", branch); await session.client.Repository.PullRequest.Merge(repo.Id, prNum, mpr); }
public void MergesPullRequest() { var mergePullRequest = new MergePullRequest("fake commit message"); var gitHubClient = Substitute.For <IGitHubClient>(); var client = new ObservablePullRequestsClient(gitHubClient); client.Merge("fake", "repo", 42, mergePullRequest); gitHubClient.Repository.PullRequest.Received().Merge("fake", "repo", 42, mergePullRequest); }
public PullRequestViewModel( ISessionService applicationService, IMarkdownService markdownService, IActionMenuFactory actionMenuService, IAlertDialogFactory alertDialogFactory) : base(applicationService, markdownService, actionMenuService, alertDialogFactory) { this.WhenAnyValue(x => x.Id) .Subscribe(x => Title = "Pull Request #" + x); this.WhenAnyValue(x => x.PullRequest.HtmlUrl) .ToProperty(this, x => x.HtmlUrl, out _htmlUrl); var canMergeObservable = this.WhenAnyValue(x => x.PullRequest) .Select(x => x != null && !x.Merged && x.Mergeable.HasValue && x.Mergeable.Value); _canMerge = canMergeObservable.CombineLatest( this.WhenAnyValue(x => x.PushAccess), (x, y) => x && y) .ToProperty(this, x => x.CanMerge); _commentsCount = this.WhenAnyValue(x => x.Issue.Comments, x => x.Comments.Count, (x, y) => x + y) .ToProperty(this, x => x.CommentCount); MergeCommand = ReactiveCommand.CreateAsyncTask(canMergeObservable, async t => { using (alertDialogFactory.Activate("Merging...")) { var req = new MergePullRequest { Message = MergeComment }; var response = await applicationService.GitHubClient.PullRequest.Merge(RepositoryOwner, RepositoryName, Id, req); if (!response.Merged) { throw new Exception(string.Format("Unable to merge pull request: {0}", response.Message)); } await LoadCommand.ExecuteAsync(); } }); var canGoToCommits = this.WhenAnyValue(x => x.PullRequest.Commits).Select(x => x > 0); GoToCommitsCommand = ReactiveCommand.Create(canGoToCommits); GoToCommitsCommand .Select(x => this.CreateViewModel <PullRequestCommitsViewModel>()) .Select(x => x.Init(RepositoryOwner, RepositoryName, Id)) .Subscribe(NavigateTo); var canGoToFiles = this.WhenAnyValue(x => x.PullRequest.ChangedFiles).Select(x => x > 0); GoToFilesCommand = ReactiveCommand.Create(canGoToFiles); GoToFilesCommand .Select(x => this.CreateViewModel <PullRequestFilesViewModel>()) .Select(x => x.Init(RepositoryOwner, RepositoryName, Id, PullRequest.Head.Sha)) .Do(x => x.CommentCreated.Subscribe(AddComment)) .Subscribe(NavigateTo); }
public void PutsToCorrectUrl() { var mergePullRequest = new MergePullRequest("fake commit message"); var connection = Substitute.For <IApiConnection>(); var client = new PullRequestsClient(connection); client.Merge("fake", "repo", 42, mergePullRequest); connection.Received().Put <PullRequestMerge>(Arg.Is <Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"), mergePullRequest); }
public PullRequestMerge MergePullRequest(Repository repository, int pullRequestId) { var mergePullRequest = new MergePullRequest { MergeMethod = PullRequestMergeMethod.Squash }; var mergePullRequestTask = octoClient.PullRequest.Merge(repository.Id, pullRequestId, mergePullRequest); return(mergePullRequestTask.Result); }
/// <summary> /// Adds <see cref="PullRequestMergeMethod"/> value to PR merge request. /// </summary> /// <param name="value"><see cref="MergePullRequest"/> instance.</param> /// <param name="mergeMethod"><see cref="PullRequestMergeMethod"/> value.</param> /// <returns>Returns the <see cref="MergePullRequest"/> instance.</returns> public static MergePullRequest WithMergeMethod(this MergePullRequest value, PullRequestMergeMethod mergeMethod) { if (value == null) { throw new ArgumentNullException(nameof(value)); } value.MergeMethod = mergeMethod; return(value); }
/// <summary> /// Adds commit message to PR merge request. /// </summary> /// <param name="value"><see cref="MergePullRequest"/> instance.</param> /// <param name="commitMessage">Commit message.</param> /// <returns>Returns the <see cref="MergePullRequest"/> instance.</returns> public static MergePullRequest WithCommitMessage(this MergePullRequest value, string commitMessage) { if (value == null) { throw new ArgumentNullException(nameof(value)); } value.CommitMessage = commitMessage; return(value); }
public async Task <PullRequestMerge> MergePR(long repo, int issueNum, string commitMessage, string?commitTitle) { var request = new MergePullRequest() { CommitMessage = commitMessage, CommitTitle = commitTitle, MergeMethod = PullRequestMergeMethod.Merge }; return(await client.PullRequest.Merge(repo, issueNum, request)); }
public async Task CanBeMerged() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var merge = new MergePullRequest("thing the thing"); var result = await _fixture.Merge(Helper.UserName, _repository.Name, pullRequest.Number, merge); Assert.True(result.Merged); }
public PullRequestMerge MergePullRequest(Repository repository, int pullRequestId, PullRequestMergeMethod mergeMethod, string commitTitle) { var mergePullRequest = new MergePullRequest { CommitTitle = commitTitle, MergeMethod = mergeMethod }; var mergePullRequestTask = octoClient.PullRequest.Merge(repository.Id, pullRequestId, mergePullRequest); return(mergePullRequestTask.Result); }
public void MergesPullRequestWithRepositoryId() { var mergePullRequest = new MergePullRequest { CommitMessage = "fake commit message" }; var gitHubClient = Substitute.For <IGitHubClient>(); var client = new ObservablePullRequestsClient(gitHubClient); client.Merge(1, 42, mergePullRequest); gitHubClient.Repository.PullRequest.Received().Merge(1, 42, mergePullRequest); }
public async Task CanBeMergedWithNoOptionalInput() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); var merge = new MergePullRequest(); var result = await _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge); Assert.True(result.Merged); }
private async Task <EventHandlerResult> OkCommandExecute(string commentContents, IssueCommentPayload payload) { var merge = new MergePullRequest(); merge.CommitTitle = $"merged PR via +ok: #{payload.Issue.Number} {payload.Issue.Title}"; var result = await GitHubClient.PullRequest.Merge(payload.Repository.Id, payload.Issue.Number, merge); return(result.Merged ? EventHandlerResult.ActionPerformed( $"merged pull request #{payload.Issue.Number} {payload.Issue.Title}") : EventHandlerResult.PayloadError( $"failed to merge pull request ${payload.Issue.Number} {payload.Issue.Title}")); }
public void PutsToCorrectUrl() { var mergePullRequest = new MergePullRequest { CommitMessage = "fake commit message" }; var connection = Substitute.For <IApiConnection>(); var client = new PullRequestsClient(connection); client.Merge("fake", "repo", 42, mergePullRequest); connection.Received().Put <PullRequestMerge>(Arg.Is <Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"), mergePullRequest, null, "application/vnd.github.polaris-preview+json"); }
public void PutsToCorrectUrlWithRepositoryId() { var mergePullRequest = new MergePullRequest { CommitMessage = "fake commit message" }; var connection = Substitute.For <IApiConnection>(); var client = new PullRequestsClient(connection); client.Merge(1, 42, mergePullRequest); connection.Received() .Put <PullRequestMerge>(Arg.Is <Uri>(u => u.ToString() == "repositories/1/pulls/42/merge"), mergePullRequest); }
public async Task CanBeMergedWithShaSpecified() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); var merge = new MergePullRequest { CommitMessage = "thing the thing", Sha = pullRequest.Head.Sha }; var result = await _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge); Assert.True(result.Merged); }
public async Task UpdatesMaster() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _repository.Name, newPullRequest); var merge = new MergePullRequest("thing the thing"); var result = await _fixture.Merge(Helper.UserName, _repository.Name, pullRequest.Number, merge); var master = await _client.GitDatabase.Reference.Get(Helper.UserName, _repository.Name, "heads/master"); Assert.Equal(result.Sha, master.Object.Sha); }
/// <summary> /// Adds SHA value to PR merge request. /// </summary> /// <param name="value"><see cref="MergePullRequest"/> instance.</param> /// <param name="sha">SHA value.</param> /// <returns>Returns the <see cref="MergePullRequest"/> instance.</returns> public static MergePullRequest WithSha(this MergePullRequest value, string sha) { if (value == null) { throw new ArgumentNullException(nameof(value)); } if (string.IsNullOrWhiteSpace(sha)) { throw new ArgumentNullException(nameof(sha)); } value.Sha = sha; return(value); }
public async Task CannotBeMergedDueMismatchConflict() { await CreateTheWorld(); var fakeSha = new string('f', 40); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); var merge = new MergePullRequest { Sha = fakeSha }; var ex = await Assert.ThrowsAsync <PullRequestMismatchException>(() => _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge)); Assert.True(ex.Message.StartsWith("Head branch was modified")); }
public async Task UpdatesMaster() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("a pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); var merge = new MergePullRequest { CommitMessage = "thing the thing" }; var result = await _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge); var master = await _github.Git.Reference.Get(Helper.UserName, _context.RepositoryName, "heads/master"); Assert.Equal(result.Sha, master.Object.Sha); }
public async Task CanBeMergedWithRebaseMethod() { await CreateTheWorld(); var newPullRequest = new NewPullRequest("squash commit pull request", branchName, "master"); var pullRequest = await _fixture.Create(Helper.UserName, _context.RepositoryName, newPullRequest); var merge = new MergePullRequest { CommitMessage = "fake commit message", CommitTitle = "fake title", MergeMethod = PullRequestMergeMethod.Rebase }; var result = await _fixture.Merge(Helper.UserName, _context.RepositoryName, pullRequest.Number, merge); var commit = await _github.Repository.Commit.Get(_context.RepositoryOwner, _context.RepositoryName, result.Sha); Assert.True(result.Merged); Assert.Equal("this is a 2nd commit to merge into the pull request", commit.Commit.Message); }
/// <summary> /// Merge a pull request /// </summary> /// <param name="pullRequestUrl">Uri of pull request to merge</param> /// <param name="parameters">Settings for merge</param> /// <returns></returns> public async Task MergePullRequestAsync(string pullRequestUrl, MergePullRequestParameters parameters) { (string owner, string repo, int id) = ParsePullRequestUri(pullRequestUrl); var mergePullRequest = new MergePullRequest { Sha = parameters.CommitToMerge, MergeMethod = parameters.SquashMerge ? PullRequestMergeMethod.Squash : PullRequestMergeMethod.Merge }; Octokit.PullRequest pr = await Client.PullRequest.Get(owner, repo, id); await Client.PullRequest.Merge(owner, repo, id, mergePullRequest); if (parameters.DeleteSourceBranch) { await Client.Git.Reference.Delete(owner, repo, $"heads/{pr.Head.Ref}"); } }
/// <inheritdoc/> protected override async Task <object> CallGitHubApi(DialogContext dc, Octokit.GitHubClient gitHubClient, CancellationToken cancellationToken = default(CancellationToken)) { if (Owner != null && Name != null && Number != null && MergePullRequest != null) { var ownerValue = Owner.GetValue(dc.State); var nameValue = Name.GetValue(dc.State); var numberValue = Number.GetValue(dc.State); var mergePullRequestValue = MergePullRequest.GetValue(dc.State); return(await gitHubClient.Repository.PullRequest.Merge(ownerValue, nameValue, (Int32)numberValue, mergePullRequestValue).ConfigureAwait(false)); } if (RepositoryId != null && Number != null && MergePullRequest != null) { var repositoryIdValue = RepositoryId.GetValue(dc.State); var numberValue = Number.GetValue(dc.State); var mergePullRequestValue = MergePullRequest.GetValue(dc.State); return(await gitHubClient.Repository.PullRequest.Merge((Int64)repositoryIdValue, (Int32)numberValue, mergePullRequestValue).ConfigureAwait(false)); } throw new ArgumentNullException("Required [number,mergePullRequest] arguments missing for GitHubClient.Repository.PullRequest.Merge"); }
/// <summary> /// Merge a pull request. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade</remarks> /// <param name="owner">The owner of the repository</param> /// <param name="name">The name of the repository</param> /// <param name="number">The pull request number</param> /// <param name="mergePullRequest">A <see cref="MergePullRequest"/> instance describing a pull request merge</param> /// <returns>A <see cref="PullRequestMerge"/> result</returns> public IObservable<PullRequestMerge> Merge(string owner, string name, int number, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); Ensure.ArgumentNotNull(mergePullRequest, "mergePullRequest"); return _client.Merge(owner, name, number, mergePullRequest).ToObservable(); }
/// <summary> /// Merge a pull request. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade</remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="number">The pull request number</param> /// <param name="mergePullRequest">A <see cref="MergePullRequest"/> instance describing a pull request merge</param> public IObservable<PullRequestMerge> Merge(long repositoryId, int number, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNull(mergePullRequest, "mergePullRequest"); return _client.Merge(repositoryId, number, mergePullRequest).ToObservable(); }
public void MergesPullRequest() { var mergePullRequest = new MergePullRequest { CommitMessage = "fake commit message" }; var gitHubClient = Substitute.For<IGitHubClient>(); var client = new ObservablePullRequestsClient(gitHubClient); client.Merge("fake", "repo", 42, mergePullRequest); gitHubClient.Repository.PullRequest.Received().Merge("fake", "repo", 42, mergePullRequest); }
private void BtnMergeClick(object sender, EventArgs e) { var curItem = lbxPullRequests.SelectedItem as PullRequest; var mergeInfo = new MergeRequestInfo { Id = curItem.Id, Version = curItem.Version, ProjectKey = curItem.DestProjectKey, TargetRepo = curItem.DestRepo, }; //Merge var mergeRequest = new MergePullRequest(_settings, mergeInfo); var response = mergeRequest.Send(); if (response.Success) { MessageBox.Show(_success.Text); StashViewPullRequestFormLoad(null, null); } else MessageBox.Show(string.Join(Environment.NewLine, response.Messages), _error.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); }
/// <summary> /// Merge a pull request. /// </summary> /// <remarks>http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade</remarks> /// <param name="repositoryId">The Id of the repository</param> /// <param name="number">The pull request number</param> /// <param name="mergePullRequest">A <see cref="MergePullRequest"/> instance describing a pull request merge</param> public IObservable <PullRequestMerge> Merge(long repositoryId, int number, MergePullRequest mergePullRequest) { Ensure.ArgumentNotNull(mergePullRequest, nameof(mergePullRequest)); return(_client.Merge(repositoryId, number, mergePullRequest).ToObservable()); }
public void PutsToCorrectUrl() { var mergePullRequest = new MergePullRequest("fake commit message"); var connection = Substitute.For<IApiConnection>(); var client = new PullRequestsClient(connection); client.Merge("fake", "repo", 42, mergePullRequest); connection.Received().Put<PullRequestMerge>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"), mergePullRequest); }
public void PutsToCorrectUrl() { var mergePullRequest = new MergePullRequest { CommitMessage = "fake commit message" }; var connection = Substitute.For<IApiConnection>(); var client = new PullRequestsClient(connection); client.Merge("fake", "repo", 42, mergePullRequest); connection.Received().Put<PullRequestMerge>(Arg.Is<Uri>(u => u.ToString() == "repos/fake/repo/pulls/42/merge"), mergePullRequest,null, "application/vnd.github.polaris-preview+json"); }