diff --git a/Octokit.Tests.Integration/Clients/RepositoryCommitsClientTests.cs b/Octokit.Tests.Integration/Clients/RepositoryCommitsClientTests.cs index 95464917..7724e443 100644 --- a/Octokit.Tests.Integration/Clients/RepositoryCommitsClientTests.cs +++ b/Octokit.Tests.Integration/Clients/RepositoryCommitsClientTests.cs @@ -87,6 +87,14 @@ public class RepositoryCommitsClientTests .Where(file => file.Status == "renamed") .All(file => string.IsNullOrEmpty(file.PreviousFileName) == false)); } + + [IntegrationTest] + public async Task CanGetSha1() + { + var sha1 = await _fixture.Sha1("octokit", "octokit.net", "master"); + + Assert.NotNull(sha1); + } } public class TestsWithNewRepository : IDisposable diff --git a/Octokit.Tests/Clients/RepositoriesClientTests.cs b/Octokit.Tests/Clients/RepositoriesClientTests.cs index e74cc97b..e1130eac 100644 --- a/Octokit.Tests/Clients/RepositoriesClientTests.cs +++ b/Octokit.Tests/Clients/RepositoriesClientTests.cs @@ -790,5 +790,35 @@ namespace Octokit.Tests.Clients await Assert.ThrowsAsync(() => client.EditBranch("owner", "repo", "", update)); } } + + public class TheSha1Method + { + [Fact] + public async Task EnsureNonNullArguments() + { + var client = new RepositoryCommitsClient(Substitute.For()); + + await Assert.ThrowsAsync(() => client.Sha1(null, "name", "reference")); + await Assert.ThrowsAsync(() => client.Sha1("", "name", "reference")); + + await Assert.ThrowsAsync(() => client.Sha1("owner", null, "reference")); + await Assert.ThrowsAsync(() => client.Sha1("owner", "", "reference")); + + await Assert.ThrowsAsync(() => client.Sha1("owner", "name", null)); + await Assert.ThrowsAsync(() => client.Sha1("owner", "name", "")); + } + + [Fact] + public void GetsCorrectUrl() + { + var connection = Substitute.For(); + var client = new RepositoryCommitsClient(connection); + + client.Sha1("owner", "name", "reference"); + + connection.Received() + .Get(Arg.Is(u => u.ToString() == "repos/owner/name/commits/reference"), null, AcceptHeaders.CommitReferenceSha1Preview); + } + } } } diff --git a/Octokit/Clients/IRepositoryCommitsClient.cs b/Octokit/Clients/IRepositoryCommitsClient.cs index f2b09f2b..27b846cb 100644 --- a/Octokit/Clients/IRepositoryCommitsClient.cs +++ b/Octokit/Clients/IRepositoryCommitsClient.cs @@ -50,5 +50,14 @@ namespace Octokit /// Used to filter list of commits returned /// Task> GetAll(string owner, string name, CommitRequest request); + + /// + /// Get the SHA-1 of a commit reference + /// + /// The owner of the repository + /// The name of the repository + /// The repository reference + /// + Task Sha1(string owner, string name, string reference); } } diff --git a/Octokit/Clients/RepositoryCommitsClient.cs b/Octokit/Clients/RepositoryCommitsClient.cs index 0e8ad1b2..c328cfb6 100644 --- a/Octokit/Clients/RepositoryCommitsClient.cs +++ b/Octokit/Clients/RepositoryCommitsClient.cs @@ -79,5 +79,21 @@ namespace Octokit return _apiConnection.GetAll(ApiUrls.RepositoryCommits(owner, name), request.ToParametersDictionary()); } + + /// + /// Get the SHA-1 of a commit reference + /// + /// The owner of the repository + /// The name of the repository + /// The repository reference + /// + public Task Sha1(string owner, string name, string reference) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + Ensure.ArgumentNotNullOrEmptyString(reference, "reference"); + + return _apiConnection.Get(ApiUrls.RepositoryCommit(owner, name, reference), null, AcceptHeaders.CommitReferenceSha1Preview); + } } } \ No newline at end of file