@@ -16,7 +16,8 @@ class Repository : IEquatable<Repository>, IRepository
16
16
private string name ;
17
17
18
18
public event Action < CacheUpdateEvent > LogChanged ;
19
- public event Action < CacheUpdateEvent > StatusChanged ;
19
+ public event Action < CacheUpdateEvent > TrackingStatusChanged ;
20
+ public event Action < CacheUpdateEvent > StatusEntriesChanged ;
20
21
public event Action < CacheUpdateEvent > CurrentBranchChanged ;
21
22
public event Action < CacheUpdateEvent > CurrentRemoteChanged ;
22
23
public event Action < CacheUpdateEvent > CurrentBranchAndRemoteChanged ;
@@ -116,7 +117,7 @@ public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent)
116
117
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
117
118
118
119
Logger . Trace ( "Check GitLogCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
119
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
120
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
120
121
121
122
if ( raiseEvent )
122
123
{
@@ -128,17 +129,33 @@ public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent)
128
129
129
130
public void CheckStatusChangedEvent ( CacheUpdateEvent cacheUpdateEvent )
130
131
{
131
- var managedCache = cacheContainer . GitStatusCache ;
132
+ var managedCache = cacheContainer . GitTrackingStatusCache ;
132
133
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
133
134
134
135
Logger . Trace ( "Check GitStatusCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
135
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
136
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
136
137
137
138
if ( raiseEvent )
138
139
{
139
140
var dateTimeOffset = managedCache . LastUpdatedAt ;
140
141
var updateEvent = new CacheUpdateEvent { UpdatedTime = dateTimeOffset } ;
141
- HandleGitStatusCacheUpdatedEvent ( updateEvent ) ;
142
+ HandleGitTrackingStatusCacheUpdatedEvent ( updateEvent ) ;
143
+ }
144
+ }
145
+
146
+ public void CheckStatusEntriesChangedEvent ( CacheUpdateEvent cacheUpdateEvent )
147
+ {
148
+ var managedCache = cacheContainer . GitStatusEntriesCache ;
149
+ var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
150
+
151
+ Logger . Trace ( "Check GitStatusEntriesCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
152
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
153
+
154
+ if ( raiseEvent )
155
+ {
156
+ var dateTimeOffset = managedCache . LastUpdatedAt ;
157
+ var updateEvent = new CacheUpdateEvent { UpdatedTime = dateTimeOffset } ;
158
+ HandleGitStatusEntriesCacheUpdatedEvent ( updateEvent ) ;
142
159
}
143
160
}
144
161
@@ -163,7 +180,7 @@ private void CheckRepositoryInfoCacheEvent(CacheUpdateEvent cacheUpdateEvent)
163
180
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
164
181
165
182
Logger . Trace ( "Check RepositoryInfoCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
166
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
183
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
167
184
168
185
if ( raiseEvent )
169
186
{
@@ -179,7 +196,7 @@ public void CheckLocksChangedEvent(CacheUpdateEvent cacheUpdateEvent)
179
196
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
180
197
181
198
Logger . Trace ( "Check GitLocksCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
182
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
199
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
183
200
184
201
if ( raiseEvent )
185
202
{
@@ -242,7 +259,7 @@ private void CheckBranchCacheEvent(CacheUpdateEvent cacheUpdateEvent)
242
259
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
243
260
244
261
Logger . Trace ( "Check BranchCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
245
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
262
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
246
263
247
264
if ( raiseEvent )
248
265
{
@@ -263,8 +280,8 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType)
263
280
repositoryManager ? . UpdateGitLog ( ) ;
264
281
break ;
265
282
266
- case CacheType . GitStatusCache :
267
- repositoryManager ? . UpdateGitStatus ( ) ;
283
+ case CacheType . GitTrackingStatusCache :
284
+ repositoryManager ? . UpdateGitAheadBehindStatus ( ) ;
268
285
break ;
269
286
270
287
case CacheType . GitLocksCache :
@@ -277,6 +294,10 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType)
277
294
case CacheType . RepositoryInfoCache :
278
295
break ;
279
296
297
+ case CacheType . GitStatusEntriesCache :
298
+ repositoryManager ? . UpdateGitStatus ( ) ;
299
+ break ;
300
+
280
301
default :
281
302
throw new ArgumentOutOfRangeException ( nameof ( cacheType ) , cacheType , null ) ;
282
303
}
@@ -295,8 +316,8 @@ private void CacheContainer_OnCacheUpdated(CacheType cacheType, DateTimeOffset o
295
316
HandleGitLogCacheUpdatedEvent ( cacheUpdateEvent ) ;
296
317
break ;
297
318
298
- case CacheType . GitStatusCache :
299
- HandleGitStatusCacheUpdatedEvent ( cacheUpdateEvent ) ;
319
+ case CacheType . GitTrackingStatusCache :
320
+ HandleGitTrackingStatusCacheUpdatedEvent ( cacheUpdateEvent ) ;
300
321
break ;
301
322
302
323
case CacheType . GitLocksCache :
@@ -310,6 +331,10 @@ private void CacheContainer_OnCacheUpdated(CacheType cacheType, DateTimeOffset o
310
331
HandleRepositoryInfoCacheUpdatedEvent ( cacheUpdateEvent ) ;
311
332
break ;
312
333
334
+ case CacheType . GitStatusEntriesCache :
335
+ HandleGitStatusEntriesCacheUpdatedEvent ( cacheUpdateEvent ) ;
336
+ break ;
337
+
313
338
default :
314
339
throw new ArgumentOutOfRangeException ( nameof ( cacheType ) , cacheType , null ) ;
315
340
}
@@ -329,10 +354,16 @@ private void HandleGitLocksCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
329
354
LocksChanged ? . Invoke ( cacheUpdateEvent ) ;
330
355
}
331
356
332
- private void HandleGitStatusCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
357
+ private void HandleGitTrackingStatusCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
358
+ {
359
+ Logger . Trace ( "GitTrackingStatusCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
360
+ TrackingStatusChanged ? . Invoke ( cacheUpdateEvent ) ;
361
+ }
362
+
363
+ private void HandleGitStatusEntriesCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
333
364
{
334
- Logger . Trace ( "GitStatusCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
335
- StatusChanged ? . Invoke ( cacheUpdateEvent ) ;
365
+ Logger . Trace ( "GitStatusEntriesCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
366
+ StatusEntriesChanged ? . Invoke ( cacheUpdateEvent ) ;
336
367
}
337
368
338
369
private void HandleGitLogCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
@@ -498,20 +529,20 @@ private ConfigRemote? CurrentConfigRemote
498
529
499
530
public int CurrentAhead
500
531
{
501
- get { return cacheContainer . GitStatusCache . Ahead ; }
502
- private set { cacheContainer . GitStatusCache . Ahead = value ; }
532
+ get { return cacheContainer . GitTrackingStatusCache . Ahead ; }
533
+ private set { cacheContainer . GitTrackingStatusCache . Ahead = value ; }
503
534
}
504
535
505
536
public int CurrentBehind
506
537
{
507
- get { return cacheContainer . GitStatusCache . Behind ; }
508
- private set { cacheContainer . GitStatusCache . Behind = value ; }
538
+ get { return cacheContainer . GitTrackingStatusCache . Behind ; }
539
+ private set { cacheContainer . GitTrackingStatusCache . Behind = value ; }
509
540
}
510
541
511
542
public List < GitStatusEntry > CurrentChanges
512
543
{
513
- get { return cacheContainer . GitStatusCache . Entries ; }
514
- private set { cacheContainer . GitStatusCache . Entries = value ; }
544
+ get { return cacheContainer . GitStatusEntriesCache . Entries ; }
545
+ private set { cacheContainer . GitStatusEntriesCache . Entries = value ; }
515
546
}
516
547
517
548
public GitBranch ? CurrentBranch
@@ -629,7 +660,7 @@ public void CheckUserChangedEvent(CacheUpdateEvent cacheUpdateEvent)
629
660
var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
630
661
631
662
Logger . Trace ( "Check GitUserCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
632
- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
663
+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
633
664
634
665
if ( raiseEvent )
635
666
{
@@ -694,7 +725,7 @@ private void GitUserCacheOnCacheInvalidated()
694
725
695
726
private void HandleUserCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
696
727
{
697
- Logger . Trace ( "GitUserCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
728
+ Logger . Trace ( "GitUserCache Updated {0}" , cacheUpdateEvent . UpdatedTime ) ;
698
729
Changed ? . Invoke ( cacheUpdateEvent ) ;
699
730
}
700
731
@@ -726,15 +757,23 @@ private void UpdateUserAndEmail()
726
757
public struct CacheUpdateEvent
727
758
{
728
759
[ NonSerialized ] private DateTimeOffset ? updatedTimeValue ;
729
- private string updatedTimeString ;
760
+ public string updatedTimeString ;
730
761
731
762
public DateTimeOffset UpdatedTime
732
763
{
733
764
get
734
765
{
735
766
if ( ! updatedTimeValue . HasValue )
736
767
{
737
- UpdatedTime = DateTimeOffset . MinValue ;
768
+ DateTimeOffset result ;
769
+ if ( DateTimeOffset . TryParseExact ( updatedTimeString , Constants . Iso8601Format , CultureInfo . InvariantCulture , DateTimeStyles . None , out result ) )
770
+ {
771
+ updatedTimeValue = result ;
772
+ }
773
+ else
774
+ {
775
+ UpdatedTime = DateTimeOffset . MinValue ;
776
+ }
738
777
}
739
778
740
779
return updatedTimeValue . Value ;
0 commit comments