diff --git a/Octokit/Clients/IRepositoriesClient.cs b/Octokit/Clients/IRepositoriesClient.cs
index 2989c610..89ae4187 100644
--- a/Octokit/Clients/IRepositoriesClient.cs
+++ b/Octokit/Clients/IRepositoriesClient.cs
@@ -264,5 +264,16 @@ namespace Octokit
/// New values to update the repository with
/// The updated
Task Edit(string owner, string name, RepositoryUpdate update);
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "base")]
+ Task Compare(string owner, string name, string @base, string head);
}
}
diff --git a/Octokit/Clients/RepositoriesClient.cs b/Octokit/Clients/RepositoriesClient.cs
index f46e65bd..2c44c10b 100644
--- a/Octokit/Clients/RepositoriesClient.cs
+++ b/Octokit/Clients/RepositoriesClient.cs
@@ -426,5 +426,22 @@ namespace Octokit
return ApiConnection.Get(ApiUrls.RepoBranch(owner, repositoryName, branchName));
}
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Task Compare(string owner, string name, string @base, string head)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(@base, "branchName");
+
+ return ApiConnection.Get(ApiUrls.RepoCompare(owner, name, @base, head));
+ }
}
}
diff --git a/Octokit/Helpers/ApiUrls.cs b/Octokit/Helpers/ApiUrls.cs
index d334c34f..c422634c 100644
--- a/Octokit/Helpers/ApiUrls.cs
+++ b/Octokit/Helpers/ApiUrls.cs
@@ -1049,6 +1049,21 @@ namespace Octokit
return "repos/{0}/{1}/tags".FormatUri(owner, name);
}
+ ///
+ /// Returns the for comparing two commits.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// The base commit
+ /// The head commit
+ ///
+ public static Uri RepoCompare(string owner, string repositoryName, string @base, string head)
+ {
+ var encodedBase = @base.UriEncode();
+ var encodedHead = head.UriEncode();
+ return "repos/{0}/{1}/compare/{2}...{3}".FormatUri(owner, repositoryName, encodedBase, encodedHead);
+ }
+
///
/// Returns the for a repository branch.
///
diff --git a/Octokit/Helpers/StringExtensions.cs b/Octokit/Helpers/StringExtensions.cs
index 7276d7af..cc8f1705 100644
--- a/Octokit/Helpers/StringExtensions.cs
+++ b/Octokit/Helpers/StringExtensions.cs
@@ -26,6 +26,11 @@ namespace Octokit
return new Uri(string.Format(CultureInfo.InvariantCulture, pattern, args), UriKind.Relative);
}
+ public static string UriEncode(this string input)
+ {
+ return System.Net.WebUtility.UrlEncode(input);
+ }
+
static readonly Regex _optionalQueryStringRegex = new Regex("\\{\\?([^}]+)\\}");
public static Uri ExpandUriTemplate(this string template, object values)
{
diff --git a/Octokit/Models/Response/CompareResult.cs b/Octokit/Models/Response/CompareResult.cs
new file mode 100644
index 00000000..65e834ac
--- /dev/null
+++ b/Octokit/Models/Response/CompareResult.cs
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+
+namespace Octokit
+{
+ public class CompareResult
+ {
+ public string Url { get; set; }
+ public string HtmlUrl { get; set; }
+ public string PermalinkUrl { get; set; }
+ public string DiffUrl { get; set; }
+ public string PatchUrl { get; set; }
+ public Commit BaseCommit { get; set; }
+ public string Status { get; set; }
+ public int AheadBy { get; set; }
+ public int BehindBy { get; set; }
+ public int TotalCommits { get; set; }
+ public IReadOnlyCollection Commits { get; set; }
+ }
+}
diff --git a/Octokit/Octokit-Mono.csproj b/Octokit/Octokit-Mono.csproj
index 9fbca9f5..cd62c96c 100644
--- a/Octokit/Octokit-Mono.csproj
+++ b/Octokit/Octokit-Mono.csproj
@@ -310,6 +310,7 @@
+
\ No newline at end of file
diff --git a/Octokit/Octokit-MonoAndroid.csproj b/Octokit/Octokit-MonoAndroid.csproj
index cb66cd52..c1630543 100644
--- a/Octokit/Octokit-MonoAndroid.csproj
+++ b/Octokit/Octokit-MonoAndroid.csproj
@@ -321,6 +321,7 @@
+
\ No newline at end of file
diff --git a/Octokit/Octokit-Monotouch.csproj b/Octokit/Octokit-Monotouch.csproj
index 5a1d9522..603a097f 100644
--- a/Octokit/Octokit-Monotouch.csproj
+++ b/Octokit/Octokit-Monotouch.csproj
@@ -316,6 +316,7 @@
+
\ No newline at end of file
diff --git a/Octokit/Octokit-netcore45.csproj b/Octokit/Octokit-netcore45.csproj
index aba7eb5d..14929305 100644
--- a/Octokit/Octokit-netcore45.csproj
+++ b/Octokit/Octokit-netcore45.csproj
@@ -308,6 +308,7 @@
+
diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj
index 51c1de2d..076d7c93 100644
--- a/Octokit/Octokit.csproj
+++ b/Octokit/Octokit.csproj
@@ -64,6 +64,7 @@
+