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

Commit 2efa02f

Browse files
authored
Merge pull request #401 from github-for-unity/fixes/repository-with-better-events
Restructuring events in Repository with the CacheManager
2 parents 01736cb + ffe5027 commit 2efa02f

File tree

8 files changed

+239
-187
lines changed

8 files changed

+239
-187
lines changed

src/GitHub.Api/Git/IRepository.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,15 @@ public interface IRepository : IEquatable<IRepository>
1919
ITask RequestLock(string file);
2020
ITask ReleaseLock(string file, bool force);
2121

22-
void CheckRepositoryInfoCacheEvent(CacheUpdateEvent cacheUpdateEvent);
23-
void CheckBranchCacheEvent(CacheUpdateEvent cacheUpdateEvent);
24-
void CheckGitStatusCacheEvent(CacheUpdateEvent cacheUpdateEvent);
25-
void CheckGitLogCacheEvent(CacheUpdateEvent cacheUpdateEvent);
26-
void CheckGitLocksCacheEvent(CacheUpdateEvent cacheUpdateEvent);
22+
void CheckLogChangedEvent(CacheUpdateEvent gitLogCacheUpdateEvent);
23+
void CheckStatusChangedEvent(CacheUpdateEvent cacheUpdateEvent);
24+
void CheckCurrentBranchChangedEvent(CacheUpdateEvent cacheUpdateEvent);
25+
void CheckCurrentRemoteChangedEvent(CacheUpdateEvent cacheUpdateEvent);
26+
void CheckCurrentBranchAndRemoteChangedEvent(CacheUpdateEvent cacheUpdateEvent);
27+
void CheckLocalBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent);
28+
void CheckLocksChangedEvent(CacheUpdateEvent cacheUpdateEvent);
29+
void CheckRemoteBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent);
30+
void CheckLocalAndRemoteBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent);
2731

2832
/// <summary>
2933
/// Gets the name of the repository.
@@ -62,10 +66,14 @@ public interface IRepository : IEquatable<IRepository>
6266
string CurrentBranchName { get; }
6367
List<GitLogEntry> CurrentLog { get; }
6468

65-
event Action<CacheUpdateEvent> GitStatusCacheUpdated;
66-
event Action<CacheUpdateEvent> GitLogCacheUpdated;
67-
event Action<CacheUpdateEvent> GitLockCacheUpdated;
68-
event Action<CacheUpdateEvent> BranchCacheUpdated;
69-
event Action<CacheUpdateEvent> RepositoryInfoCacheUpdated;
69+
event Action<CacheUpdateEvent> LogChanged;
70+
event Action<CacheUpdateEvent> StatusChanged;
71+
event Action<CacheUpdateEvent> CurrentBranchChanged;
72+
event Action<CacheUpdateEvent> CurrentRemoteChanged;
73+
event Action<CacheUpdateEvent> CurrentBranchAndRemoteChanged;
74+
event Action<CacheUpdateEvent> LocalBranchListChanged;
75+
event Action<CacheUpdateEvent> LocksChanged;
76+
event Action<CacheUpdateEvent> RemoteBranchListChanged;
77+
event Action<CacheUpdateEvent> LocalAndRemoteBranchListChanged;
7078
}
7179
}

src/GitHub.Api/Git/Repository.cs

Lines changed: 98 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@ class Repository : IEquatable<Repository>, IRepository
1515
private UriString cloneUrl;
1616
private string name;
1717

18-
public event Action<CacheUpdateEvent> GitStatusCacheUpdated;
19-
public event Action<CacheUpdateEvent> GitLogCacheUpdated;
20-
public event Action<CacheUpdateEvent> GitLockCacheUpdated;
21-
public event Action<CacheUpdateEvent> BranchCacheUpdated;
22-
public event Action<CacheUpdateEvent> RepositoryInfoCacheUpdated;
23-
2418
/// <summary>
2519
/// Initializes a new instance of the <see cref="Repository"/> class.
2620
/// </summary>
@@ -64,64 +58,69 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType)
6458

6559
private void CacheContainer_OnCacheUpdated(CacheType cacheType, DateTimeOffset offset)
6660
{
61+
var cacheUpdateEvent = new CacheUpdateEvent { UpdatedTimeString = offset.ToString() };
6762
switch (cacheType)
6863
{
6964
case CacheType.BranchCache:
70-
FireBranchCacheUpdated(offset);
65+
HandleBranchCacheUpdatedEvent(cacheUpdateEvent);
7166
break;
7267

7368
case CacheType.GitLogCache:
74-
FireGitLogCacheUpdated(offset);
69+
HandleGitLogCacheUpdatedEvent(cacheUpdateEvent);
7570
break;
7671

7772
case CacheType.GitStatusCache:
78-
FireGitStatusCacheUpdated(offset);
73+
HandleGitStatucCacheUpdatedEvent(cacheUpdateEvent);
7974
break;
8075

8176
case CacheType.GitLocksCache:
82-
FireGitLocksCacheUpdated(offset);
77+
HandleGitLocksCacheUpdatedEvent(cacheUpdateEvent);
8378
break;
8479

8580
case CacheType.GitUserCache:
8681
break;
8782

8883
case CacheType.RepositoryInfoCache:
89-
FireRepositoryInfoCacheUpdated(offset);
84+
HandleRepositoryInfoCacheUpdatedEvent(cacheUpdateEvent);
9085
break;
9186

9287
default:
9388
throw new ArgumentOutOfRangeException(nameof(cacheType), cacheType, null);
9489
}
9590
}
9691

97-
private void FireGitLogCacheUpdated(DateTimeOffset dateTimeOffset)
92+
private void HandleRepositoryInfoCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
9893
{
99-
Logger.Trace("GitLogCacheUpdated {0}", dateTimeOffset);
100-
GitLogCacheUpdated?.Invoke(new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() });
94+
Logger.Trace("RepositoryInfoCache Updated {0}", cacheUpdateEvent.UpdatedTimeString);
95+
CurrentBranchChanged?.Invoke(cacheUpdateEvent);
96+
CurrentRemoteChanged?.Invoke(cacheUpdateEvent);
97+
CurrentBranchAndRemoteChanged?.Invoke(cacheUpdateEvent);
10198
}
10299

103-
private void FireBranchCacheUpdated(DateTimeOffset dateTimeOffset)
100+
private void HandleGitLocksCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
104101
{
105-
Logger.Trace("BranchCacheUpdated {0}", dateTimeOffset);
106-
BranchCacheUpdated?.Invoke(new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() });
102+
Logger.Trace("GitLocksCache Updated {0}", cacheUpdateEvent.UpdatedTimeString);
103+
LocksChanged?.Invoke(cacheUpdateEvent);
107104
}
108105

109-
private void FireGitStatusCacheUpdated(DateTimeOffset dateTimeOffset)
106+
private void HandleGitStatucCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
110107
{
111-
Logger.Trace("GitStatusCacheUpdated {0}", dateTimeOffset);
112-
GitStatusCacheUpdated?.Invoke(new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() });
108+
Logger.Trace("GitStatusCache Updated {0}", cacheUpdateEvent.UpdatedTimeString);
109+
StatusChanged?.Invoke(cacheUpdateEvent);
113110
}
114111

115-
private void FireGitLocksCacheUpdated(DateTimeOffset dateTimeOffset)
112+
private void HandleGitLogCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
116113
{
117-
Logger.Trace("GitStatusCacheUpdated {0}", dateTimeOffset);
118-
GitLockCacheUpdated?.Invoke(new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() });
114+
Logger.Trace("GitLogCache Updated {0}", cacheUpdateEvent.UpdatedTimeString);
115+
LogChanged?.Invoke(cacheUpdateEvent);
119116
}
120117

121-
private void FireRepositoryInfoCacheUpdated(DateTimeOffset dateTimeOffset)
118+
private void HandleBranchCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
122119
{
123-
Logger.Trace("RepositoryInfoCacheUpdated {0}", dateTimeOffset);
124-
RepositoryInfoCacheUpdated?.Invoke(new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() });
120+
Logger.Trace("BranchCache Updated {0}", cacheUpdateEvent.UpdatedTimeString);
121+
LocalBranchListChanged?.Invoke(cacheUpdateEvent);
122+
RemoteBranchListChanged?.Invoke(cacheUpdateEvent);
123+
LocalAndRemoteBranchListChanged?.Invoke(cacheUpdateEvent);
125124
}
126125

127126
public void Initialize(IRepositoryManager initRepositoryManager)
@@ -202,73 +201,114 @@ public ITask ReleaseLock(string file, bool force)
202201
return repositoryManager.UnlockFile(file, force).Then(UpdateLocks);
203202
}
204203

205-
public void CheckRepositoryInfoCacheEvent(CacheUpdateEvent cacheUpdateEvent)
204+
public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent)
206205
{
207-
var managedCache = cacheContainer.RepositoryInfoCache;
206+
var managedCache = cacheContainer.GitLogCache;
208207
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent, managedCache);
209208

210-
Logger.Trace("CheckRepositoryInfoCacheEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
209+
Logger.Trace("Check GitLogCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
211210
cacheUpdateEvent.UpdatedTimeString ?? "[NULL]", raiseEvent);
212211

213212
if (raiseEvent)
214213
{
215-
FireBranchCacheUpdated(managedCache.LastUpdatedAt);
214+
var dateTimeOffset = managedCache.LastUpdatedAt;
215+
var updateEvent = new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() };
216+
HandleGitLogCacheUpdatedEvent(updateEvent);
216217
}
217218
}
218219

219-
public void CheckBranchCacheEvent(CacheUpdateEvent cacheUpdateEvent)
220+
public void CheckStatusChangedEvent(CacheUpdateEvent cacheUpdateEvent)
220221
{
221-
var managedCache = cacheContainer.BranchCache;
222+
var managedCache = cacheContainer.GitStatusCache;
222223
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent, managedCache);
223224

224-
Logger.Trace("CheckBranchCacheEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
225+
Logger.Trace("Check GitStatusCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
225226
cacheUpdateEvent.UpdatedTimeString ?? "[NULL]", raiseEvent);
226227

227228
if (raiseEvent)
228229
{
229-
FireBranchCacheUpdated(managedCache.LastUpdatedAt);
230+
var dateTimeOffset = managedCache.LastUpdatedAt;
231+
var updateEvent = new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() };
232+
HandleGitStatucCacheUpdatedEvent(updateEvent);
230233
}
231234
}
232235

233-
public void CheckGitStatusCacheEvent(CacheUpdateEvent cacheUpdateEvent)
236+
public void CheckCurrentBranchChangedEvent(CacheUpdateEvent cacheUpdateEvent)
234237
{
235-
var managedCache = cacheContainer.GitStatusCache;
238+
CheckRepositoryInfoCacheEvent(cacheUpdateEvent);
239+
}
240+
241+
public void CheckCurrentRemoteChangedEvent(CacheUpdateEvent cacheUpdateEvent)
242+
{
243+
CheckRepositoryInfoCacheEvent(cacheUpdateEvent);
244+
}
245+
246+
public void CheckCurrentBranchAndRemoteChangedEvent(CacheUpdateEvent cacheUpdateEvent)
247+
{
248+
CheckRepositoryInfoCacheEvent(cacheUpdateEvent);
249+
}
250+
251+
private void CheckRepositoryInfoCacheEvent(CacheUpdateEvent cacheUpdateEvent)
252+
{
253+
var managedCache = cacheContainer.RepositoryInfoCache;
236254
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent, managedCache);
237255

238-
Logger.Trace("CheckGitStatusCacheEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
256+
Logger.Trace("Check RepositoryInfoCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
239257
cacheUpdateEvent.UpdatedTimeString ?? "[NULL]", raiseEvent);
240258

241259
if (raiseEvent)
242260
{
243-
FireGitStatusCacheUpdated(managedCache.LastUpdatedAt);
261+
var dateTimeOffset = managedCache.LastUpdatedAt;
262+
var updateEvent = new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() };
263+
HandleRepositoryInfoCacheUpdatedEvent(updateEvent);
244264
}
245265
}
246266

247-
public void CheckGitLogCacheEvent(CacheUpdateEvent cacheUpdateEvent)
267+
public void CheckLocksChangedEvent(CacheUpdateEvent cacheUpdateEvent)
248268
{
249-
var managedCache = cacheContainer.GitLogCache;
250-
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent, managedCache);
269+
CacheUpdateEvent cacheUpdateEvent1 = cacheUpdateEvent;
270+
var managedCache = cacheContainer.GitLocksCache;
271+
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent1, managedCache);
251272

252-
Logger.Trace("CheckGitLogCacheEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
253-
cacheUpdateEvent.UpdatedTimeString ?? "[NULL]", raiseEvent);
273+
Logger.Trace("Check GitLocksCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
274+
cacheUpdateEvent1.UpdatedTimeString ?? "[NULL]", raiseEvent);
254275

255276
if (raiseEvent)
256277
{
257-
FireGitLogCacheUpdated(managedCache.LastUpdatedAt);
278+
var dateTimeOffset = managedCache.LastUpdatedAt;
279+
var updateEvent = new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() };
280+
HandleGitLocksCacheUpdatedEvent(updateEvent);
258281
}
259282
}
260283

261-
public void CheckGitLocksCacheEvent(CacheUpdateEvent cacheUpdateEvent)
284+
public void CheckLocalBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent)
262285
{
263-
var managedCache = cacheContainer.GitLocksCache;
286+
CheckBranchCacheEvent(cacheUpdateEvent);
287+
}
288+
289+
public void CheckRemoteBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent)
290+
{
291+
CheckBranchCacheEvent(cacheUpdateEvent);
292+
}
293+
294+
public void CheckLocalAndRemoteBranchListChangedEvent(CacheUpdateEvent cacheUpdateEvent)
295+
{
296+
CheckBranchCacheEvent(cacheUpdateEvent);
297+
}
298+
299+
private void CheckBranchCacheEvent(CacheUpdateEvent cacheUpdateEvent)
300+
{
301+
var managedCache = cacheContainer.BranchCache;
264302
var raiseEvent = ShouldRaiseCacheEvent(cacheUpdateEvent, managedCache);
265303

266-
Logger.Trace("CheckGitLocksCacheEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
304+
Logger.Trace("Check BranchCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}", managedCache.LastUpdatedAt,
267305
cacheUpdateEvent.UpdatedTimeString ?? "[NULL]", raiseEvent);
268306

269307
if (raiseEvent)
270308
{
271-
FireGitLogCacheUpdated(managedCache.LastUpdatedAt);
309+
var dateTimeOffset = managedCache.LastUpdatedAt;
310+
var updateEvent = new CacheUpdateEvent { UpdatedTimeString = dateTimeOffset.ToString() };
311+
HandleBranchCacheUpdatedEvent(updateEvent);
272312
}
273313
}
274314

@@ -538,6 +578,16 @@ public List<GitLogEntry> CurrentLog
538578
set { cacheContainer.GitLogCache.Log = value; }
539579
}
540580

581+
public event Action<CacheUpdateEvent> LogChanged;
582+
public event Action<CacheUpdateEvent> StatusChanged;
583+
public event Action<CacheUpdateEvent> CurrentBranchChanged;
584+
public event Action<CacheUpdateEvent> CurrentRemoteChanged;
585+
public event Action<CacheUpdateEvent> CurrentBranchAndRemoteChanged;
586+
public event Action<CacheUpdateEvent> LocalBranchListChanged;
587+
public event Action<CacheUpdateEvent> LocksChanged;
588+
public event Action<CacheUpdateEvent> RemoteBranchListChanged;
589+
public event Action<CacheUpdateEvent> LocalAndRemoteBranchListChanged;
590+
541591
public List<GitLock> CurrentLocks
542592
{
543593
get { return cacheContainer.GitLocksCache.GitLocks; }

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ class BranchesView : Subview
4848
[SerializeField] private Vector2 scroll;
4949
[SerializeField] private BranchTreeNode selectedNode;
5050

51-
[SerializeField] private CacheUpdateEvent branchUpdateEvent;
52-
[NonSerialized] private bool branchCacheHasUpdate;
51+
[SerializeField] private CacheUpdateEvent lastLocalAndRemoteBranchListChangedEvent;
52+
[NonSerialized] private bool localAndRemoteBranchListHasUpdate;
5353

5454
[SerializeField] private GitBranch[] localBranches;
5555
[SerializeField] private GitBranch[] remoteBranches;
@@ -60,14 +60,14 @@ public override void InitializeView(IView parent)
6060
targetMode = mode;
6161
}
6262

63-
private void Repository_BranchCacheUpdated(CacheUpdateEvent cacheUpdateEvent)
63+
private void RepositoryOnLocalAndRemoteBranchListChanged(CacheUpdateEvent cacheUpdateEvent)
6464
{
65-
if (!branchUpdateEvent.Equals(cacheUpdateEvent))
65+
if (!lastLocalAndRemoteBranchListChangedEvent.Equals(cacheUpdateEvent))
6666
{
6767
new ActionTask(TaskManager.Token, () =>
6868
{
69-
branchUpdateEvent = cacheUpdateEvent;
70-
branchCacheHasUpdate = true;
69+
lastLocalAndRemoteBranchListChangedEvent = cacheUpdateEvent;
70+
localAndRemoteBranchListHasUpdate = true;
7171
Redraw();
7272
})
7373
{ Affinity = TaskAffinity.UI }.Start();
@@ -81,7 +81,7 @@ public override void OnEnable()
8181

8282
if (Repository != null)
8383
{
84-
Repository.CheckBranchCacheEvent(branchUpdateEvent);
84+
Repository.CheckLocalAndRemoteBranchListChangedEvent(lastLocalAndRemoteBranchListChangedEvent);
8585
}
8686
}
8787

@@ -99,9 +99,9 @@ public override void OnDataUpdate()
9999

100100
private void MaybeUpdateData()
101101
{
102-
if (branchCacheHasUpdate)
102+
if (localAndRemoteBranchListHasUpdate)
103103
{
104-
branchCacheHasUpdate = false;
104+
localAndRemoteBranchListHasUpdate = false;
105105

106106
localBranches = Repository.LocalBranches.ToArray();
107107
remoteBranches = Repository.RemoteBranches.ToArray();
@@ -116,15 +116,15 @@ private void AttachHandlers(IRepository repository)
116116
if (repository == null)
117117
return;
118118

119-
repository.BranchCacheUpdated += Repository_BranchCacheUpdated;
119+
repository.LocalAndRemoteBranchListChanged += RepositoryOnLocalAndRemoteBranchListChanged;
120120
}
121121

122122
private void DetachHandlers(IRepository repository)
123123
{
124124
if (repository == null)
125125
return;
126126

127-
repository.BranchCacheUpdated -= Repository_BranchCacheUpdated;
127+
repository.LocalAndRemoteBranchListChanged -= RepositoryOnLocalAndRemoteBranchListChanged;
128128
}
129129

130130
public override void OnGUI()

0 commit comments

Comments
 (0)