11using System ;
2+ using System . Collections . Generic ;
23using System . IO ;
34using System . Threading ;
45using System . Threading . Tasks ;
@@ -70,6 +71,16 @@ public void SetEnabled(bool enabled)
7071 }
7172 }
7273
74+ public void UpdateSubmodules ( List < Submodule > submodules )
75+ {
76+ lock ( _lockSubmodule )
77+ {
78+ _submodules . Clear ( ) ;
79+ foreach ( var submodule in submodules )
80+ _submodules . Add ( submodule . Path ) ;
81+ }
82+ }
83+
7384 public void MarkBranchDirtyManually ( )
7485 {
7586 _updateBranch = DateTime . Now . ToFileTime ( ) - 1 ;
@@ -168,7 +179,7 @@ private void OnRepositoryChanged(object o, FileSystemEventArgs e)
168179 return ;
169180
170181 var name = e . Name . Replace ( "\\ " , "/" ) ;
171- if ( name . StartsWith ( "modules" , StringComparison . Ordinal ) )
182+ if ( name . StartsWith ( "modules" , StringComparison . Ordinal ) && name . EndsWith ( "HEAD" , StringComparison . Ordinal ) )
172183 {
173184 _updateSubmodules = DateTime . Now . AddSeconds ( 1 ) . ToFileTime ( ) ;
174185 }
@@ -201,6 +212,19 @@ private void OnWorkingCopyChanged(object o, FileSystemEventArgs e)
201212 var name = e . Name . Replace ( "\\ " , "/" ) ;
202213 if ( name == ".git" || name . StartsWith ( ".git/" , StringComparison . Ordinal ) )
203214 return ;
215+
216+ lock ( _submodules )
217+ {
218+ foreach ( var submodule in _submodules )
219+ {
220+ if ( name . StartsWith ( submodule , StringComparison . Ordinal ) )
221+ {
222+ _updateSubmodules = DateTime . Now . AddSeconds ( 1 ) . ToFileTime ( ) ;
223+ return ;
224+ }
225+ }
226+ }
227+
204228 _updateWC = DateTime . Now . AddSeconds ( 1 ) . ToFileTime ( ) ;
205229 }
206230
@@ -214,5 +238,8 @@ private void OnWorkingCopyChanged(object o, FileSystemEventArgs e)
214238 private long _updateSubmodules = 0 ;
215239 private long _updateStashes = 0 ;
216240 private long _updateTags = 0 ;
241+
242+ private object _lockSubmodule = new object ( ) ;
243+ private List < string > _submodules = new List < string > ( ) ;
217244 }
218245}
0 commit comments