Skip to content

Commit 44c83ef

Browse files
authored
enhance: added more FileSystemWatcher patterns, to improve handling (#1345)
Skip files frequently updated by Git fsmonitor--daemon and Visual Studio, to ease debugging and for early exit. Check for HEAD and ORIG_HEAD under .git/modules/<submodule>/, to improve handling of submodules. Check for MERGE_HEAD and AUTO_MERGE under .git/, to improve handling of submodules.
1 parent c3ac59e commit 44c83ef

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/Models/Watcher.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,21 @@ private void OnRepositoryChanged(object o, FileSystemEventArgs e)
154154
return;
155155

156156
var name = e.Name.Replace("\\", "/");
157-
if (name.StartsWith("modules", StringComparison.Ordinal) && name.EndsWith("HEAD", StringComparison.Ordinal))
157+
158+
if (name.Contains("fsmonitor--daemon/", StringComparison.Ordinal))
159+
return;
160+
161+
if (name.StartsWith("modules", StringComparison.Ordinal))
162+
{
163+
if (name.EndsWith("/HEAD", StringComparison.Ordinal) ||
164+
name.EndsWith("/ORIG_HEAD", StringComparison.Ordinal))
165+
{
166+
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
167+
_updateWC = DateTime.Now.AddSeconds(1).ToFileTime();
168+
}
169+
}
170+
else if (name.Equals("MERGE_HEAD", StringComparison.Ordinal) ||
171+
name.Equals("AUTO_MERGE", StringComparison.Ordinal))
158172
{
159173
_updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime();
160174
_updateWC = DateTime.Now.AddSeconds(1).ToFileTime();
@@ -187,7 +201,13 @@ private void OnWorkingCopyChanged(object o, FileSystemEventArgs e)
187201
return;
188202

189203
var name = e.Name.Replace("\\", "/");
190-
if (name.Equals(".git", StringComparison.Ordinal) || name.StartsWith(".git/", StringComparison.Ordinal))
204+
205+
if (name.Equals(".git", StringComparison.Ordinal) ||
206+
name.StartsWith(".git/", StringComparison.Ordinal) ||
207+
name.EndsWith("/.git", StringComparison.Ordinal))
208+
return;
209+
210+
if (name.StartsWith(".vs/", StringComparison.Ordinal) && name.EndsWith("/.suo", StringComparison.Ordinal))
191211
return;
192212

193213
if (name.Equals(".gitmodules", StringComparison.Ordinal))

0 commit comments

Comments
 (0)