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 public interface IRepository
{ {
string FullPath { get; set; }
string GitDirForWatcher { get; }
void RefreshBranches(); void RefreshBranches();
void RefreshWorktrees(); void RefreshWorktrees();
void RefreshTags(); void RefreshTags();

View file

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

View file

@ -45,21 +45,6 @@ namespace SourceGit.ViewModels
set => SetProperty(ref _gitDir, value); 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 public Models.RepositorySettings Settings
{ {
get => _settings; get => _settings;
@ -472,7 +457,16 @@ namespace SourceGit.ViewModels
try 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) catch (Exception ex)
{ {