refactor: pass dirs to watcher directly

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-03-17 16:29:56 +08:00
parent b4ab4afd3a
commit 7031693489
No known key found for this signature in database
3 changed files with 13 additions and 22 deletions

View file

@ -2,9 +2,6 @@
{
public interface IRepository
{
string FullPath { get; set; }
string GitDirForWatcher { get; }
void RefreshBranches();
void RefreshWorktrees();
void RefreshTags();

View file

@ -8,12 +8,12 @@ namespace SourceGit.Models
{
public class Watcher : IDisposable
{
public Watcher(IRepository repo)
public Watcher(IRepository repo, string fullpath, string gitDir)
{
_repo = repo;
_wcWatcher = new FileSystemWatcher();
_wcWatcher.Path = _repo.FullPath;
_wcWatcher.Path = fullpath;
_wcWatcher.Filter = "*";
_wcWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.Size | NotifyFilters.CreationTime;
_wcWatcher.IncludeSubdirectories = true;
@ -24,7 +24,7 @@ namespace SourceGit.Models
_wcWatcher.EnableRaisingEvents = true;
_repoWatcher = new FileSystemWatcher();
_repoWatcher.Path = _repo.GitDirForWatcher;
_repoWatcher.Path = gitDir;
_repoWatcher.Filter = "*";
_repoWatcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.DirectoryName | NotifyFilters.FileName;
_repoWatcher.IncludeSubdirectories = true;

View file

@ -45,21 +45,6 @@ namespace SourceGit.ViewModels
set => SetProperty(ref _gitDir, value);
}
public string GitDirForWatcher
{
get
{
// Only try to get `$GIT_COMMON_DIR` if this repository looks like a worktree.
if (_gitDir.Replace("\\", "/").IndexOf(".git/worktrees/", StringComparison.Ordinal) > 0)
{
var commonDir = new Commands.QueryGitCommonDir(_fullpath).Result();
return string.IsNullOrEmpty(commonDir) ? _gitDir : commonDir;
}
return _gitDir;
}
}
public Models.RepositorySettings Settings
{
get => _settings;
@ -472,7 +457,16 @@ namespace SourceGit.ViewModels
try
{
_watcher = new Models.Watcher(this);
// For worktrees, we need to watch the $GIT_COMMON_DIR instead of the $GIT_DIR.
var gitDirForWatcher = _gitDir;
if (_gitDir.Replace("\\", "/").IndexOf(".git/worktrees/", StringComparison.Ordinal) > 0)
{
var commonDir = new Commands.QueryGitCommonDir(_fullpath).Result();
if (!string.IsNullOrEmpty(commonDir))
gitDirForWatcher = commonDir;
}
_watcher = new Models.Watcher(this, _fullpath, gitDirForWatcher);
}
catch (Exception ex)
{