From 44c83ef3426f5e738d549c1c53dcd8c30b9e2cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=B6ran=20W?= <44604769+goran-w@users.noreply.github.com> Date: Thu, 22 May 2025 03:11:28 +0200 Subject: [PATCH] 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//, to improve handling of submodules. Check for MERGE_HEAD and AUTO_MERGE under .git/, to improve handling of submodules. --- src/Models/Watcher.cs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Models/Watcher.cs b/src/Models/Watcher.cs index 44f8ee45..81b4605b 100644 --- a/src/Models/Watcher.cs +++ b/src/Models/Watcher.cs @@ -154,7 +154,21 @@ namespace SourceGit.Models return; var name = e.Name.Replace("\\", "/"); - if (name.StartsWith("modules", StringComparison.Ordinal) && name.EndsWith("HEAD", StringComparison.Ordinal)) + + if (name.Contains("fsmonitor--daemon/", StringComparison.Ordinal)) + return; + + if (name.StartsWith("modules", StringComparison.Ordinal)) + { + if (name.EndsWith("/HEAD", StringComparison.Ordinal) || + name.EndsWith("/ORIG_HEAD", StringComparison.Ordinal)) + { + _updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime(); + _updateWC = DateTime.Now.AddSeconds(1).ToFileTime(); + } + } + else if (name.Equals("MERGE_HEAD", StringComparison.Ordinal) || + name.Equals("AUTO_MERGE", StringComparison.Ordinal)) { _updateSubmodules = DateTime.Now.AddSeconds(1).ToFileTime(); _updateWC = DateTime.Now.AddSeconds(1).ToFileTime(); @@ -187,7 +201,13 @@ namespace SourceGit.Models return; var name = e.Name.Replace("\\", "/"); - if (name.Equals(".git", StringComparison.Ordinal) || name.StartsWith(".git/", StringComparison.Ordinal)) + + if (name.Equals(".git", StringComparison.Ordinal) || + name.StartsWith(".git/", StringComparison.Ordinal) || + name.EndsWith("/.git", StringComparison.Ordinal)) + return; + + if (name.StartsWith(".vs/", StringComparison.Ordinal) && name.EndsWith("/.suo", StringComparison.Ordinal)) return; if (name.Equals(".gitmodules", StringComparison.Ordinal))