Skip to content

Commit a6333c1

Browse files
steve85meziantou
andauthored
Implements since and until parameters when retrieving commit list (#516)
* Implements since and until parameters when retrieving commit list * Replaces WebUtility.UrlEncode with Uri.EscapeDataString --------- Co-authored-by: Gérald Barré <[email protected]>
1 parent fde8c62 commit a6333c1

File tree

4 files changed

+118
-1
lines changed

4 files changed

+118
-1
lines changed

NGitLab.Tests/RepositoryClient/RepositoryClientTests.cs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,102 @@ public async Task GetCommitBySha1Range()
130130
Assert.AreEqual(allCommits[3].Id, commits[1].Id);
131131
}
132132

133+
[Test]
134+
[NGitLabRetry]
135+
public async Task GetCommitsSince()
136+
{
137+
// Arrange
138+
using var context = await RepositoryClientTestsContext.CreateAsync(commitCount: 5);
139+
140+
var defaultBranch = context.Project.DefaultBranch;
141+
var since = DateTime.UtcNow;
142+
var expectedSinceValue = Uri.EscapeDataString(since.ToString("s", CultureInfo.InvariantCulture));
143+
var commitRequest = new GetCommitsRequest
144+
{
145+
RefName = defaultBranch,
146+
Since = since,
147+
};
148+
149+
// Act
150+
var commits = context.RepositoryClient.GetCommits(commitRequest).ToArray();
151+
152+
// Assert
153+
var lastRequestQueryString = context.Context.LastRequest.RequestUri.Query;
154+
155+
Assert.True(lastRequestQueryString.Contains($"since={expectedSinceValue}"));
156+
}
157+
158+
[Test]
159+
[NGitLabRetry]
160+
public async Task GetCommitsDoesntIncludeSinceWhenNotSpecified()
161+
{
162+
// Arrange
163+
using var context = await RepositoryClientTestsContext.CreateAsync(commitCount: 5);
164+
165+
var defaultBranch = context.Project.DefaultBranch;
166+
var commitRequest = new GetCommitsRequest
167+
{
168+
RefName = defaultBranch,
169+
Since = null,
170+
};
171+
172+
// Act
173+
var commits = context.RepositoryClient.GetCommits(commitRequest).ToArray();
174+
175+
// Assert
176+
var lastRequestQueryString = context.Context.LastRequest.RequestUri.Query;
177+
178+
Assert.False(lastRequestQueryString.Contains("since="));
179+
}
180+
181+
[Test]
182+
[NGitLabRetry]
183+
public async Task GetCommitsUntil()
184+
{
185+
// Arrange
186+
using var context = await RepositoryClientTestsContext.CreateAsync(commitCount: 5);
187+
188+
var defaultBranch = context.Project.DefaultBranch;
189+
var until = DateTime.UtcNow;
190+
var expectedUntilValue = Uri.EscapeDataString(until.ToString("s", CultureInfo.InvariantCulture));
191+
var commitRequest = new GetCommitsRequest
192+
{
193+
RefName = defaultBranch,
194+
Until = until,
195+
};
196+
197+
// Act
198+
var commits = context.RepositoryClient.GetCommits(commitRequest).ToArray();
199+
200+
// Assert
201+
var lastRequestQueryString = context.Context.LastRequest.RequestUri.Query;
202+
203+
Assert.True(lastRequestQueryString.Contains($"until={expectedUntilValue}"));
204+
}
205+
206+
[Test]
207+
[NGitLabRetry]
208+
public async Task GetCommitsDoesntIncludeUntilWhenNotSpecified()
209+
{
210+
// Arrange
211+
using var context = await RepositoryClientTestsContext.CreateAsync(commitCount: 5);
212+
213+
var defaultBranch = context.Project.DefaultBranch;
214+
var commitRequest = new GetCommitsRequest
215+
{
216+
RefName = defaultBranch,
217+
Until = null,
218+
};
219+
220+
// Act
221+
var commits = context.RepositoryClient.GetCommits(commitRequest).ToArray();
222+
223+
// Assert
224+
var lastRequestQueryString = context.Context.LastRequest.RequestUri.Query;
225+
226+
Assert.False(lastRequestQueryString.Contains("until="));
227+
}
228+
133229
[Test]
134230
[NGitLabRetry]
135231
public async Task GetCommitDiff()

NGitLab/GetCommitsRequest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace NGitLab
1+
using System;
2+
3+
namespace NGitLab
24
{
35
public class GetCommitsRequest
46
{
@@ -13,5 +15,9 @@ public class GetCommitsRequest
1315
public int MaxResults { get; set; }
1416

1517
public uint PerPage { get; set; } = DefaultPerPage;
18+
19+
public DateTime? Since { get; set; }
20+
21+
public DateTime? Until { get; set; }
1622
}
1723
}

NGitLab/Impl/RepositoryClient.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Globalization;
34
using System.IO;
45
using System.Linq;
56
using NGitLab.Extensions;
@@ -85,6 +86,16 @@ public IEnumerable<Commit> GetCommits(GetCommitsRequest request)
8586
lst.Add($"first_parent={Uri.EscapeDataString(request.FirstParent.ToString())}");
8687
}
8788

89+
if (request.Since.HasValue)
90+
{
91+
lst.Add($"since={Uri.EscapeDataString(request.Since.Value.ToString("s", CultureInfo.InvariantCulture))}");
92+
}
93+
94+
if (request.Until.HasValue)
95+
{
96+
lst.Add($"until={Uri.EscapeDataString(request.Until.Value.ToString("s", CultureInfo.InvariantCulture))}");
97+
}
98+
8899
var perPage = request.MaxResults > 0 ? Math.Min(request.MaxResults, request.PerPage) : request.PerPage;
89100
lst.Add($"per_page={perPage.ToStringInvariant()}");
90101

NGitLab/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ NGitLab.GetCommitsRequest.PerPage.get -> uint
3535
NGitLab.GetCommitsRequest.PerPage.set -> void
3636
NGitLab.GetCommitsRequest.RefName.get -> string
3737
NGitLab.GetCommitsRequest.RefName.set -> void
38+
NGitLab.GetCommitsRequest.Since.get -> System.DateTime?
39+
NGitLab.GetCommitsRequest.Since.set -> void
40+
NGitLab.GetCommitsRequest.Until.get -> System.DateTime?
41+
NGitLab.GetCommitsRequest.Until.set -> void
3842
NGitLab.GitLabClient
3943
NGitLab.GitLabClient.AdvancedSearch.get -> NGitLab.ISearchClient
4044
NGitLab.GitLabClient.Deployments.get -> NGitLab.IDeploymentClient

0 commit comments

Comments
 (0)