Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit ac085ea

Browse files
Being sure to fire the RepositoryCommitted event
1 parent da7b314 commit ac085ea

File tree

3 files changed

+84
-5
lines changed

3 files changed

+84
-5
lines changed

src/GitHub.Api/Events/RepositoryWatcher.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@ private int ProcessEvents(Event[] fileEvents)
197197
{
198198
events.Add(EventType.LocalBranchesChanged, null);
199199
}
200+
else if (!events.ContainsKey(EventType.RepositoryCommitted) && fileA.IsChildOf(paths.DotGitCommitEditMsg))
201+
{
202+
events.Add(EventType.RepositoryCommitted, null);
203+
}
200204
}
201205
else
202206
{
@@ -256,6 +260,13 @@ private int FireEvents(Dictionary<EventType, List<EventData>> events)
256260
eventsProcessed++;
257261
}
258262

263+
if (events.ContainsKey(EventType.RepositoryCommitted))
264+
{
265+
Logger.Trace("RepositoryCommitted");
266+
RepositoryCommitted?.Invoke();
267+
eventsProcessed++;
268+
}
269+
259270
return eventsProcessed;
260271
}
261272

@@ -293,6 +304,7 @@ private enum EventType
293304
LocalBranchesChanged,
294305
RemoteBranchesChanged,
295306
RepositoryChanged,
307+
RepositoryCommitted
296308
}
297309

298310
private class EventData

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public RepositoryPathConfiguration(NPath repositoryPath)
7272
DotGitIndex = DotGitPath.Combine("index");
7373
DotGitHead = DotGitPath.Combine("HEAD");
7474
DotGitConfig = DotGitPath.Combine("config");
75+
DotGitCommitEditMsg = DotGitPath.Combine("COMMIT_EDITMSG");
7576
}
7677

7778
public NPath RepositoryPath { get; }
@@ -81,6 +82,7 @@ public RepositoryPathConfiguration(NPath repositoryPath)
8182
public NPath DotGitIndex { get; }
8283
public NPath DotGitHead { get; }
8384
public NPath DotGitConfig { get; }
85+
public NPath DotGitCommitEditMsg { get; }
8486
}
8587

8688
class RepositoryManager : IRepositoryManager

src/tests/IntegrationTests/Events/RepositoryWatcherTests.cs

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace IntegrationTests
1313
class RepositoryWatcherTests : BaseGitEnvironmentTest
1414
{
1515
[Test, Category("TimeSensitive")]
16-
public async Task ShouldDetectFileChanges()
16+
public async Task ShouldDetectFileChangesAndCommit()
1717
{
1818
await Initialize(TestRepoMasterCleanSynchronized, initializeRepository: false);
1919

@@ -26,6 +26,8 @@ public async Task ShouldDetectFileChanges()
2626

2727
repositoryWatcher.Initialize();
2828
repositoryWatcher.Start();
29+
repositoryWatcher.Stop();
30+
2931
try
3032
{
3133
var foobarTxt = TestRepoMasterCleanSynchronized.Combine("foobar.txt");
@@ -35,17 +37,62 @@ public async Task ShouldDetectFileChanges()
3537
foobarTxt.WriteAllText("foobar");
3638
await TaskManager.Wait();
3739

38-
watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
39-
4040
Logger.Trace("Continue test");
4141

42+
repositoryWatcher.Start();
43+
44+
watcherAutoResetEvent.RepositoryChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
45+
watcherAutoResetEvent.Reset();
46+
4247
repositoryWatcherListener.DidNotReceive().HeadChanged();
4348
repositoryWatcherListener.DidNotReceive().ConfigChanged();
4449
repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
4550
repositoryWatcherListener.DidNotReceive().IndexChanged();
4651
repositoryWatcherListener.Received().RepositoryChanged();
4752
repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
4853
repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
54+
repositoryWatcherListener.ClearReceivedCalls();
55+
56+
repositoryWatcher.Stop();
57+
Logger.Trace("Issuing Command");
58+
59+
await GitClient.AddAll().StartAsAsync();
60+
61+
Logger.Trace("Completed Command");
62+
repositoryWatcher.Start();
63+
64+
watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
65+
watcherAutoResetEvent.Reset();
66+
67+
repositoryWatcherListener.DidNotReceive().HeadChanged();
68+
repositoryWatcherListener.DidNotReceive().ConfigChanged();
69+
repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
70+
repositoryWatcherListener.Received(1).IndexChanged();
71+
repositoryWatcherListener.DidNotReceive().RepositoryChanged();
72+
repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
73+
repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
74+
repositoryWatcherListener.ClearReceivedCalls();
75+
76+
repositoryWatcher.Stop();
77+
Logger.Trace("Issuing Command");
78+
79+
await GitClient.Commit("Test Commit", string.Empty).StartAsAsync();
80+
81+
Logger.Trace("Completed Command");
82+
repositoryWatcher.Start();
83+
84+
watcherAutoResetEvent.RepositoryCommitted.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
85+
watcherAutoResetEvent.IndexChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
86+
watcherAutoResetEvent.Reset();
87+
88+
repositoryWatcherListener.DidNotReceive().HeadChanged();
89+
repositoryWatcherListener.DidNotReceive().ConfigChanged();
90+
repositoryWatcherListener.Received(1).RepositoryCommitted();
91+
repositoryWatcherListener.Received(1).IndexChanged();
92+
repositoryWatcherListener.DidNotReceive().RepositoryChanged();
93+
repositoryWatcherListener.Received(1).LocalBranchesChanged();
94+
repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
95+
repositoryWatcherListener.ClearReceivedCalls();
4996
}
5097
finally
5198
{
@@ -176,6 +223,7 @@ public async Task ShouldDetectBranchCreate()
176223
repositoryWatcher.Start();
177224

178225
watcherAutoResetEvent.LocalBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
226+
watcherAutoResetEvent.Reset();
179227

180228
repositoryWatcherListener.DidNotReceive().HeadChanged();
181229
repositoryWatcherListener.DidNotReceive().ConfigChanged();
@@ -206,7 +254,6 @@ public async Task ShouldDetectBranchCreate()
206254
repositoryWatcherListener.DidNotReceive().RepositoryChanged();
207255
repositoryWatcherListener.Received(1).LocalBranchesChanged();
208256
repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
209-
repositoryWatcherListener.ClearReceivedCalls();
210257
}
211258
finally
212259
{
@@ -243,6 +290,7 @@ public async Task ShouldDetectChangesToRemotes()
243290
repositoryWatcher.Start();
244291
watcherAutoResetEvent.ConfigChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
245292
watcherAutoResetEvent.RemoteBranchesChanged.WaitOne(TimeSpan.FromSeconds(2)).Should().BeTrue();
293+
watcherAutoResetEvent.Reset();
246294

247295
repositoryWatcherListener.DidNotReceive().HeadChanged();
248296
repositoryWatcherListener.Received(1).ConfigChanged();
@@ -350,7 +398,13 @@ public async Task ShouldDetectGitFetch()
350398

351399
Logger.Trace("Continue test");
352400

353-
repositoryWatcherListener.AssertDidNotReceiveAnyCalls();
401+
repositoryWatcherListener.DidNotReceive().HeadChanged();
402+
repositoryWatcherListener.DidNotReceive().ConfigChanged();
403+
repositoryWatcherListener.DidNotReceive().RepositoryCommitted();
404+
repositoryWatcherListener.DidNotReceive().IndexChanged();
405+
repositoryWatcherListener.DidNotReceive().RepositoryChanged();
406+
repositoryWatcherListener.DidNotReceive().LocalBranchesChanged();
407+
repositoryWatcherListener.DidNotReceive().RemoteBranchesChanged();
354408
}
355409
finally
356410
{
@@ -454,5 +508,16 @@ class RepositoryWatcherAutoResetEvent
454508
public AutoResetEvent RepositoryChanged { get; } = new AutoResetEvent(false);
455509
public AutoResetEvent LocalBranchesChanged { get; } = new AutoResetEvent(false);
456510
public AutoResetEvent RemoteBranchesChanged { get; } = new AutoResetEvent(false);
511+
512+
public void Reset()
513+
{
514+
HeadChanged.Reset();
515+
ConfigChanged.Reset();
516+
RepositoryCommitted.Reset();
517+
IndexChanged.Reset();
518+
RepositoryChanged.Reset();
519+
LocalBranchesChanged.Reset();
520+
RemoteBranchesChanged.Reset();
521+
}
457522
}
458523
}

0 commit comments

Comments
 (0)