Merge pull request #1479 from TattsGroup/pr-merge-method

Add MergeMethod property to PR merge request
This commit is contained in:
Brendan Forster
2016-10-03 14:27:20 +11:00
committed by GitHub
2 changed files with 82 additions and 3 deletions
@@ -637,6 +637,54 @@ public class PullRequestsClientTests : IDisposable
Assert.Equal("fake title\n\nfake commit message", commit.Commit.Message);
}
[IntegrationTest]
public async Task CanBeMergedWithMergeMethod()
{
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.Merge };
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("fake title\n\nfake commit message", commit.Commit.Message);
}
[IntegrationTest]
public async Task CanBeMergedWithSquashMethod()
{
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.Squash };
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("fake title\n\nfake commit message", commit.Commit.Message);
}
[IntegrationTest]
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);
}
[IntegrationTest]
public async Task CannotBeMergedDueMismatchConflict()
{
@@ -848,8 +896,11 @@ public class PullRequestsClientTests : IDisposable
var featureBranchTree = await CreateTree(new Dictionary<string, string> { { "README.md", "I am overwriting this blob with something new" } });
var featureBranchCommit = await CreateCommit("this is the commit to merge into the pull request", featureBranchTree.Sha, newMaster.Sha);
var featureBranchTree2 = await CreateTree(new Dictionary<string, string> { { "README.md", "I am overwriting this blob with something new a 2nd time" } });
var featureBranchCommit2 = await CreateCommit("this is a 2nd commit to merge into the pull request", featureBranchTree2.Sha, featureBranchCommit.Sha);
// create branch
await _github.Git.Reference.Create(Helper.UserName, _context.RepositoryName, new NewReference("refs/heads/my-branch", featureBranchCommit.Sha));
await _github.Git.Reference.Create(Helper.UserName, _context.RepositoryName, new NewReference("refs/heads/my-branch", featureBranchCommit2.Sha));
var otherFeatureBranchTree = await CreateTree(new Dictionary<string, string> { { "README.md", "I am overwriting this blob with something else" } });
var otherFeatureBranchCommit = await CreateCommit("this is the other commit to merge into the other pull request", otherFeatureBranchTree.Sha, newMaster.Sha);
+30 -2
View File
@@ -1,4 +1,5 @@
using System.Diagnostics;
using System;
using System.Diagnostics;
using System.Globalization;
namespace Octokit
@@ -30,14 +31,41 @@ namespace Octokit
/// <summary>
/// Commit a single commit to the head branch (optional)
/// </summary>
[Obsolete("Please use MergeMethod property. This property will no longer be supported by the GitHub API and will be removed in a future version")]
public bool Squash { get; set; }
/// <summary>
/// Specify the Merge method to use (optional - default is Merge)
/// </summary>
public PullRequestMergeMethod? MergeMethod { get; set; }
internal string DebuggerDisplay
{
get
{
return string.Format(CultureInfo.InvariantCulture, "Title: '{0}' Message: '{1}', Sha: '{2}' , Squash: '{3}'", CommitTitle, CommitMessage, Sha, Squash);
return string.Format(CultureInfo.InvariantCulture, "Title: '{0}' Message: '{1}', Sha: '{2}' , MergeMethod: '{3}'", CommitTitle, CommitMessage, Sha, MergeMethod.HasValue ? MergeMethod.Value.ToString() : "null");
}
}
}
/// <summary>
/// Method to use when merging a PR
/// </summary>
public enum PullRequestMergeMethod
{
/// <summary>
/// Create a merge commit
/// </summary>
Merge,
/// <summary>
/// Squash and merge
/// </summary>
Squash,
/// <summary>
/// Rebase and merge
/// </summary>
Rebase
}
}