diff --git a/Octokit.Reactive/Clients/IObservablePullRequestsClient.cs b/Octokit.Reactive/Clients/IObservablePullRequestsClient.cs index 35329341..9808297f 100644 --- a/Octokit.Reactive/Clients/IObservablePullRequestsClient.cs +++ b/Octokit.Reactive/Clients/IObservablePullRequestsClient.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Reactive; +using System.Threading.Tasks; namespace Octokit { @@ -62,5 +63,16 @@ namespace Octokit /// /// IObservable Update(string owner, string name, int number, PullRequestUpdate pullRequestUpdate); + + /// + /// Merges a pull request. + /// + /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade + /// The owner of the repository + /// The name of the repository + /// The pull request number + /// A instance describing a pull request merge + /// + IObservable Merge(string owner, string name, int number, MergePullRequest mergePullRequest); } } diff --git a/Octokit.Reactive/Clients/ObservablePullRequestsClient.cs b/Octokit.Reactive/Clients/ObservablePullRequestsClient.cs index e0b316b7..cce9e34d 100644 --- a/Octokit.Reactive/Clients/ObservablePullRequestsClient.cs +++ b/Octokit.Reactive/Clients/ObservablePullRequestsClient.cs @@ -102,5 +102,23 @@ namespace Octokit.Reactive.Clients return _client.Update(owner, name, number, pullRequestUpdate).ToObservable(); } + + /// + /// Merges a pull request. + /// + /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade + /// The owner of the repository + /// The name of the repository + /// The pull request number + /// A instance describing a pull request merge + /// + public IObservable 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(); + } } } \ No newline at end of file diff --git a/Octokit/Clients/IPullRequestsClient.cs b/Octokit/Clients/IPullRequestsClient.cs index 5bebb732..c1b088b7 100644 --- a/Octokit/Clients/IPullRequestsClient.cs +++ b/Octokit/Clients/IPullRequestsClient.cs @@ -61,5 +61,16 @@ namespace Octokit /// /// Task Update(string owner, string name, int number, PullRequestUpdate pullRequestUpdate); + + /// + /// Merges a pull request. + /// + /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade + /// The owner of the repository + /// The name of the repository + /// The pull request number + /// A instance describing a pull request merge + /// + Task Merge(string owner, string name, int number, MergePullRequest mergePullRequest); } } diff --git a/Octokit/Clients/PullRequestsClient.cs b/Octokit/Clients/PullRequestsClient.cs index 5bf55e59..e379cbba 100644 --- a/Octokit/Clients/PullRequestsClient.cs +++ b/Octokit/Clients/PullRequestsClient.cs @@ -95,5 +95,23 @@ namespace Octokit return ApiConnection.Patch(ApiUrls.PullRequest(owner, name, number), pullRequestUpdate); } + + /// + /// Merges a pull request. + /// + /// http://developer.github.com/v3/pulls/#merge-a-pull-request-merge-buttontrade + /// The owner of the repository + /// The name of the repository + /// The pull request number + /// A instance describing a pull request merge + /// + public Task Merge(string owner, string name, int number, MergePullRequest mergePullRequest) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNull(mergePullRequest, "mergePullRequest"); + + return ApiConnection.Put(ApiUrls.PullRequest(owner, name, number), mergePullRequest); + } } } diff --git a/Octokit/Models/Request/MergePullRequest.cs b/Octokit/Models/Request/MergePullRequest.cs new file mode 100644 index 00000000..d59e04ad --- /dev/null +++ b/Octokit/Models/Request/MergePullRequest.cs @@ -0,0 +1,22 @@ +using System; + +namespace Octokit +{ + /// + /// Used to merge a pull request. + /// + public class MergePullRequest + { + public MergePullRequest(string message) + { + Ensure.ArgumentNotNull(message, "message"); + + Message = message; + } + + /// + /// The message that will be used for the merge commit (optional) + /// + public string Message { get; private set; } + } +} diff --git a/Octokit/Models/Response/PullRequestMerge.cs b/Octokit/Models/Response/PullRequestMerge.cs new file mode 100644 index 00000000..475ad974 --- /dev/null +++ b/Octokit/Models/Response/PullRequestMerge.cs @@ -0,0 +1,22 @@ +using System; + +namespace Octokit +{ + public class PullRequestMerge + { + /// + /// The sha reference of the commit. + /// + public string sha { get; set; } + + /// + /// True if merged successfully, otherwise false. + /// + public bool Merged { get; set; } + + /// + /// The message that will be used for the merge commit. + /// + public string Message { get; set; } + } +} \ No newline at end of file diff --git a/Octokit/Octokit-Mono.csproj b/Octokit/Octokit-Mono.csproj index cc5f23f8..70cd4fd0 100644 --- a/Octokit/Octokit-Mono.csproj +++ b/Octokit/Octokit-Mono.csproj @@ -86,6 +86,7 @@ + diff --git a/Octokit/Octokit-MonoAndroid.csproj b/Octokit/Octokit-MonoAndroid.csproj index 259d8000..89fa5bfb 100644 --- a/Octokit/Octokit-MonoAndroid.csproj +++ b/Octokit/Octokit-MonoAndroid.csproj @@ -113,7 +113,9 @@ + + diff --git a/Octokit/Octokit-Monotouch.csproj b/Octokit/Octokit-Monotouch.csproj index f3e15fec..23aa80e3 100644 --- a/Octokit/Octokit-Monotouch.csproj +++ b/Octokit/Octokit-Monotouch.csproj @@ -108,7 +108,9 @@ + + diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj index bcc1af8d..92f2a2a2 100644 --- a/Octokit/Octokit.csproj +++ b/Octokit/Octokit.csproj @@ -136,6 +136,7 @@ +