mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-21 12:15:00 +00:00
refactor: pass dirs to watcher directly
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
b4ab4afd3a
commit
7031693489
3 changed files with 13 additions and 22 deletions
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue