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

Commit 615955f

Browse files
authored
Merge pull request #407 from github-for-unity/fixes/repository-manager-combined-branch-remote-updated-event
Combining RepositoryManager OnCurrentBranchUpdated & OnCurrentRemoteUpdated
2 parents 6321788 + 9fca98c commit 615955f

File tree

5 files changed

+37
-71
lines changed

5 files changed

+37
-71
lines changed

src/GitHub.Api/Git/Repository.cs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ public void Initialize(IRepositoryManager repositoryManager)
4949

5050
this.repositoryManager = repositoryManager;
5151

52-
repositoryManager.OnCurrentBranchUpdated += RepositoryManager_OnCurrentBranchUpdated;
53-
repositoryManager.OnCurrentRemoteUpdated += RepositoryManager_OnCurrentRemoteUpdated;
52+
repositoryManager.OnCurrentBranchAndRemoteUpdated += RepositoryManager_OnCurrentBranchAndRemoteUpdated;
5453
repositoryManager.OnStatusUpdated += status => CurrentStatus = status;
5554
repositoryManager.OnLocksUpdated += locks => CurrentLocks = locks;
5655
repositoryManager.OnLocalBranchListUpdated += RepositoryManager_OnLocalBranchListUpdated;
@@ -168,8 +167,16 @@ public bool Equals(IRepository other)
168167
object.Equals(LocalPath, other.LocalPath);
169168
}
170169

171-
private void RepositoryManager_OnCurrentRemoteUpdated(ConfigRemote? remote)
170+
private void RepositoryManager_OnCurrentBranchAndRemoteUpdated(ConfigBranch? branch, ConfigRemote? remote)
172171
{
172+
if (!Nullable.Equals(currentBranch, branch))
173+
{
174+
currentBranch = branch;
175+
176+
Logger.Trace("OnCurrentBranchChanged: {0}", currentBranch.HasValue ? currentBranch.ToString() : "[NULL]");
177+
OnCurrentBranchChanged?.Invoke(currentBranch.HasValue ? currentBranch.Value.Name : null);
178+
}
179+
173180
if (!Nullable.Equals(currentRemote, remote))
174181
{
175182
currentRemote = remote;
@@ -181,17 +188,6 @@ private void RepositoryManager_OnCurrentRemoteUpdated(ConfigRemote? remote)
181188
}
182189
}
183190

184-
private void RepositoryManager_OnCurrentBranchUpdated(ConfigBranch? branch)
185-
{
186-
if (!Nullable.Equals(currentBranch, branch))
187-
{
188-
currentBranch = branch;
189-
190-
Logger.Trace("OnCurrentBranchChanged: {0}", currentBranch.HasValue ? currentBranch.ToString() : "[NULL]");
191-
OnCurrentBranchChanged?.Invoke(currentBranch.HasValue ? currentBranch.Value.Name : null);
192-
}
193-
}
194-
195191
private void RepositoryManager_OnLocalBranchUpdated(string name)
196192
{
197193
if (name == currentBranch?.Name)

src/GitHub.Api/Git/RepositoryManager.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ namespace GitHub.Unity
77
{
88
public interface IRepositoryManager : IDisposable
99
{
10-
event Action<ConfigBranch?> OnCurrentBranchUpdated;
11-
event Action<ConfigRemote?> OnCurrentRemoteUpdated;
10+
event Action<ConfigBranch?, ConfigRemote?> OnCurrentBranchAndRemoteUpdated;
1211
event Action<IUser> OnGitUserLoaded;
1312
event Action<bool> OnIsBusyChanged;
1413
event Action<string> OnLocalBranchAdded;
@@ -102,8 +101,7 @@ class RepositoryManager : IRepositoryManager
102101

103102
private bool isBusy;
104103

105-
public event Action<ConfigBranch?> OnCurrentBranchUpdated;
106-
public event Action<ConfigRemote?> OnCurrentRemoteUpdated;
104+
public event Action<ConfigBranch?, ConfigRemote?> OnCurrentBranchAndRemoteUpdated;
107105
public event Action<IUser> OnGitUserLoaded;
108106
public event Action<bool> OnIsBusyChanged;
109107
public event Action<string> OnLocalBranchAdded;
@@ -458,10 +456,8 @@ private void UpdateCurrentBranchAndRemote(string head)
458456
}
459457

460458
Logger.Trace("OnCurrentBranchUpdated: {0}", branch.HasValue ? branch.Value.ToString() : "[NULL]");
461-
OnCurrentBranchUpdated?.Invoke(branch);
462-
463459
Logger.Trace("OnCurrentRemoteUpdated: {0}", remote.HasValue ? remote.Value.ToString() : "[NULL]");
464-
OnCurrentRemoteUpdated?.Invoke(remote);
460+
OnCurrentBranchAndRemoteUpdated?.Invoke(branch, remote);
465461
}
466462

467463
private void Watcher_OnIndexChanged()

src/tests/IntegrationTests/Events/RepositoryManagerTests.cs

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ public async Task ShouldDetectFileChanges()
9696
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
9797
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
9898
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
99-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
100-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
99+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
101100
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
102101
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
103102
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -155,8 +154,7 @@ public async Task ShouldAddAndCommitFiles()
155154
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
156155
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
157156
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
158-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
159-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
157+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
160158
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
161159
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
162160
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -181,8 +179,7 @@ await RepositoryManager
181179
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
182180
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
183181
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
184-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
185-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
182+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
186183
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
187184
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
188185
repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch);
@@ -232,8 +229,7 @@ public async Task ShouldAddAndCommitAllFiles()
232229
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
233230
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
234231
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
235-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
236-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
232+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
237233
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
238234
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
239235
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -258,8 +254,7 @@ await RepositoryManager
258254
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
259255
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
260256
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
261-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
262-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
257+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
263258
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
264259
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
265260
repositoryManagerListener.Received().OnLocalBranchUpdated(expectedLocalBranch);
@@ -299,8 +294,7 @@ public async Task ShouldDetectBranchChange()
299294
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
300295
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
301296
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
302-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
303-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
297+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
304298
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
305299
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
306300
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -355,8 +349,7 @@ public async Task ShouldDetectBranchDelete()
355349
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
356350
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
357351
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
358-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
359-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
352+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
360353
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
361354
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
362355
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -409,8 +402,7 @@ public async Task ShouldDetectBranchCreate()
409402
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
410403
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
411404
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
412-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
413-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
405+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
414406
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
415407
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
416408
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -459,8 +451,7 @@ public async Task ShouldDetectBranchCreate()
459451
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
460452
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
461453
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
462-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
463-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
454+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
464455
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
465456
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
466457
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -551,8 +542,7 @@ public async Task ShouldDetectChangesToRemotes()
551542
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
552543
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
553544
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
554-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
555-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
545+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
556546
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
557547
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
558548
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -586,8 +576,7 @@ public async Task ShouldDetectChangesToRemotes()
586576
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
587577
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
588578
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
589-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
590-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
579+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
591580
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
592581
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
593582
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -677,8 +666,7 @@ await RepositoryManager.CreateBranch("branch2", "another/master")
677666
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
678667
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
679668
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
680-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
681-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
669+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
682670
repositoryManagerListener.Received().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
683671
repositoryManagerListener.Received().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
684672
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -736,8 +724,7 @@ await RepositoryManager.SwitchBranch("branch2")
736724
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
737725
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
738726
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
739-
repositoryManagerListener.Received().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
740-
repositoryManagerListener.Received().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
727+
repositoryManagerListener.Received().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
741728
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
742729
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
743730
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);
@@ -808,8 +795,7 @@ public async Task ShouldDetectGitPull()
808795
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
809796
repositoryManagerListener.Received().OnStatusUpdated(Args.GitStatus);
810797
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
811-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
812-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
798+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
813799
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
814800
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
815801
repositoryManagerListener.Received().OnLocalBranchUpdated(Args.String);
@@ -897,8 +883,7 @@ public async Task ShouldDetectGitFetch()
897883
repositoryManagerListener.Received().OnIsBusyChanged(Args.Bool);
898884
repositoryManagerListener.DidNotReceive().OnStatusUpdated(Args.GitStatus);
899885
repositoryManagerListener.DidNotReceive().OnLocksUpdated(Args.EnumerableGitLock);
900-
repositoryManagerListener.DidNotReceive().OnCurrentBranchUpdated(Arg.Any<ConfigBranch?>());
901-
repositoryManagerListener.DidNotReceive().OnCurrentRemoteUpdated(Arg.Any<ConfigRemote?>());
886+
repositoryManagerListener.DidNotReceive().OnCurrentBranchAndRemoteUpdated(Arg.Any<ConfigBranch?>(), Arg.Any<ConfigRemote?>());
902887
repositoryManagerListener.DidNotReceive().OnLocalBranchListUpdated(Arg.Any<Dictionary<string, ConfigBranch>>());
903888
repositoryManagerListener.DidNotReceive().OnRemoteBranchListUpdated(Arg.Any<Dictionary<string, ConfigRemote>>(), Arg.Any<Dictionary<string, Dictionary<string, ConfigBranch>>>());
904889
repositoryManagerListener.DidNotReceive().OnLocalBranchUpdated(Args.String);

0 commit comments

Comments
 (0)