@@ -16,7 +16,8 @@ class Repository : IEquatable<Repository>, IRepository
1616 private string name ;
1717
1818 public event Action < CacheUpdateEvent > LogChanged ;
19- public event Action < CacheUpdateEvent > StatusChanged ;
19+ public event Action < CacheUpdateEvent > TrackingStatusChanged ;
20+ public event Action < CacheUpdateEvent > StatusEntriesChanged ;
2021 public event Action < CacheUpdateEvent > CurrentBranchChanged ;
2122 public event Action < CacheUpdateEvent > CurrentRemoteChanged ;
2223 public event Action < CacheUpdateEvent > CurrentBranchAndRemoteChanged ;
@@ -116,7 +117,7 @@ public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent)
116117 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
117118
118119 Logger . Trace ( "Check GitLogCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
119- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
120+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
120121
121122 if ( raiseEvent )
122123 {
@@ -128,17 +129,33 @@ public void CheckLogChangedEvent(CacheUpdateEvent cacheUpdateEvent)
128129
129130 public void CheckStatusChangedEvent ( CacheUpdateEvent cacheUpdateEvent )
130131 {
131- var managedCache = cacheContainer . GitStatusCache ;
132+ var managedCache = cacheContainer . GitTrackingStatusCache ;
132133 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
133134
134135 Logger . Trace ( "Check GitStatusCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
135- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
136+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
136137
137138 if ( raiseEvent )
138139 {
139140 var dateTimeOffset = managedCache . LastUpdatedAt ;
140141 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 ) ;
142159 }
143160 }
144161
@@ -163,7 +180,7 @@ private void CheckRepositoryInfoCacheEvent(CacheUpdateEvent cacheUpdateEvent)
163180 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
164181
165182 Logger . Trace ( "Check RepositoryInfoCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
166- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
183+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
167184
168185 if ( raiseEvent )
169186 {
@@ -179,7 +196,7 @@ public void CheckLocksChangedEvent(CacheUpdateEvent cacheUpdateEvent)
179196 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
180197
181198 Logger . Trace ( "Check GitLocksCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
182- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
199+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
183200
184201 if ( raiseEvent )
185202 {
@@ -242,7 +259,7 @@ private void CheckBranchCacheEvent(CacheUpdateEvent cacheUpdateEvent)
242259 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
243260
244261 Logger . Trace ( "Check BranchCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
245- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
262+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
246263
247264 if ( raiseEvent )
248265 {
@@ -263,8 +280,8 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType)
263280 repositoryManager ? . UpdateGitLog ( ) ;
264281 break ;
265282
266- case CacheType . GitStatusCache :
267- repositoryManager ? . UpdateGitStatus ( ) ;
283+ case CacheType . GitTrackingStatusCache :
284+ repositoryManager ? . UpdateGitAheadBehindStatus ( ) ;
268285 break ;
269286
270287 case CacheType . GitLocksCache :
@@ -277,6 +294,10 @@ private void CacheContainer_OnCacheInvalidated(CacheType cacheType)
277294 case CacheType . RepositoryInfoCache :
278295 break ;
279296
297+ case CacheType . GitStatusEntriesCache :
298+ repositoryManager ? . UpdateGitStatus ( ) ;
299+ break ;
300+
280301 default :
281302 throw new ArgumentOutOfRangeException ( nameof ( cacheType ) , cacheType , null ) ;
282303 }
@@ -295,8 +316,8 @@ private void CacheContainer_OnCacheUpdated(CacheType cacheType, DateTimeOffset o
295316 HandleGitLogCacheUpdatedEvent ( cacheUpdateEvent ) ;
296317 break ;
297318
298- case CacheType . GitStatusCache :
299- HandleGitStatusCacheUpdatedEvent ( cacheUpdateEvent ) ;
319+ case CacheType . GitTrackingStatusCache :
320+ HandleGitTrackingStatusCacheUpdatedEvent ( cacheUpdateEvent ) ;
300321 break ;
301322
302323 case CacheType . GitLocksCache :
@@ -310,6 +331,10 @@ private void CacheContainer_OnCacheUpdated(CacheType cacheType, DateTimeOffset o
310331 HandleRepositoryInfoCacheUpdatedEvent ( cacheUpdateEvent ) ;
311332 break ;
312333
334+ case CacheType . GitStatusEntriesCache :
335+ HandleGitStatusEntriesCacheUpdatedEvent ( cacheUpdateEvent ) ;
336+ break ;
337+
313338 default :
314339 throw new ArgumentOutOfRangeException ( nameof ( cacheType ) , cacheType , null ) ;
315340 }
@@ -329,10 +354,16 @@ private void HandleGitLocksCacheUpdatedEvent(CacheUpdateEvent cacheUpdateEvent)
329354 LocksChanged ? . Invoke ( cacheUpdateEvent ) ;
330355 }
331356
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 )
333364 {
334- Logger . Trace ( "GitStatusCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
335- StatusChanged ? . Invoke ( cacheUpdateEvent ) ;
365+ Logger . Trace ( "GitStatusEntriesCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
366+ StatusEntriesChanged ? . Invoke ( cacheUpdateEvent ) ;
336367 }
337368
338369 private void HandleGitLogCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
@@ -498,20 +529,20 @@ private ConfigRemote? CurrentConfigRemote
498529
499530 public int CurrentAhead
500531 {
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 ; }
503534 }
504535
505536 public int CurrentBehind
506537 {
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 ; }
509540 }
510541
511542 public List < GitStatusEntry > CurrentChanges
512543 {
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 ; }
515546 }
516547
517548 public GitBranch ? CurrentBranch
@@ -629,7 +660,7 @@ public void CheckUserChangedEvent(CacheUpdateEvent cacheUpdateEvent)
629660 var raiseEvent = managedCache . LastUpdatedAt != cacheUpdateEvent . UpdatedTime ;
630661
631662 Logger . Trace ( "Check GitUserCache CacheUpdateEvent Current:{0} Check:{1} Result:{2}" , managedCache . LastUpdatedAt ,
632- cacheUpdateEvent . UpdatedTimeString ?? "[NULL]" , raiseEvent ) ;
663+ cacheUpdateEvent . UpdatedTime , raiseEvent ) ;
633664
634665 if ( raiseEvent )
635666 {
@@ -694,7 +725,7 @@ private void GitUserCacheOnCacheInvalidated()
694725
695726 private void HandleUserCacheUpdatedEvent ( CacheUpdateEvent cacheUpdateEvent )
696727 {
697- Logger . Trace ( "GitUserCache Updated {0}" , cacheUpdateEvent . UpdatedTimeString ) ;
728+ Logger . Trace ( "GitUserCache Updated {0}" , cacheUpdateEvent . UpdatedTime ) ;
698729 Changed ? . Invoke ( cacheUpdateEvent ) ;
699730 }
700731
@@ -726,15 +757,23 @@ private void UpdateUserAndEmail()
726757 public struct CacheUpdateEvent
727758 {
728759 [ NonSerialized ] private DateTimeOffset ? updatedTimeValue ;
729- private string updatedTimeString ;
760+ public string updatedTimeString ;
730761
731762 public DateTimeOffset UpdatedTime
732763 {
733764 get
734765 {
735766 if ( ! updatedTimeValue . HasValue )
736767 {
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+ }
738777 }
739778
740779 return updatedTimeValue . Value ;
0 commit comments