mirror of
https://github.com/sourcegit-scm/sourcegit
synced 2025-05-21 12:15:00 +00:00
code_review: PR #1103
Since we only use `$GIT_COMMON_DIR` in filesystem watcher, it is unnecessary to store this value in `Repository`, and we can query the `$GIT_COMMON_DIR` only when it looks like a worktree Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
parent
cea8a90680
commit
b4ab4afd3a
4 changed files with 16 additions and 17 deletions
|
@ -3,8 +3,7 @@
|
||||||
public interface IRepository
|
public interface IRepository
|
||||||
{
|
{
|
||||||
string FullPath { get; set; }
|
string FullPath { get; set; }
|
||||||
string GitDir { get; set; }
|
string GitDirForWatcher { get; }
|
||||||
string GitCommonDir { get; set; }
|
|
||||||
|
|
||||||
void RefreshBranches();
|
void RefreshBranches();
|
||||||
void RefreshWorktrees();
|
void RefreshWorktrees();
|
||||||
|
|
|
@ -23,11 +23,8 @@ namespace SourceGit.Models
|
||||||
_wcWatcher.Deleted += OnWorkingCopyChanged;
|
_wcWatcher.Deleted += OnWorkingCopyChanged;
|
||||||
_wcWatcher.EnableRaisingEvents = true;
|
_wcWatcher.EnableRaisingEvents = true;
|
||||||
|
|
||||||
// If this repository is a worktree repository, just watch the main repository's gitdir.
|
|
||||||
var repoWatchDir = _repo.GitCommonDir.Replace("\\", "/");
|
|
||||||
|
|
||||||
_repoWatcher = new FileSystemWatcher();
|
_repoWatcher = new FileSystemWatcher();
|
||||||
_repoWatcher.Path = repoWatchDir;
|
_repoWatcher.Path = _repo.GitDirForWatcher;
|
||||||
_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;
|
||||||
|
|
|
@ -282,7 +282,6 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
var isBare = new Commands.IsBareRepository(node.Id).Result();
|
var isBare = new Commands.IsBareRepository(node.Id).Result();
|
||||||
var gitDir = node.Id;
|
var gitDir = node.Id;
|
||||||
var gitCommonDir = gitDir;
|
|
||||||
if (!isBare)
|
if (!isBare)
|
||||||
{
|
{
|
||||||
gitDir = new Commands.QueryGitDir(node.Id).Result();
|
gitDir = new Commands.QueryGitDir(node.Id).Result();
|
||||||
|
@ -292,12 +291,9 @@ namespace SourceGit.ViewModels
|
||||||
App.RaiseException(ctx, "Given path is not a valid git repository!");
|
App.RaiseException(ctx, "Given path is not a valid git repository!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
gitCommonDir = new Commands.QueryGitCommonDir(node.Id).Result();
|
|
||||||
if (string.IsNullOrEmpty(gitCommonDir))
|
|
||||||
gitCommonDir = gitDir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var repo = new Repository(isBare, node.Id, gitDir, gitCommonDir);
|
var repo = new Repository(isBare, node.Id, gitDir);
|
||||||
repo.Open();
|
repo.Open();
|
||||||
|
|
||||||
if (page == null)
|
if (page == null)
|
||||||
|
|
|
@ -45,10 +45,19 @@ namespace SourceGit.ViewModels
|
||||||
set => SetProperty(ref _gitDir, value);
|
set => SetProperty(ref _gitDir, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GitCommonDir
|
public string GitDirForWatcher
|
||||||
{
|
{
|
||||||
get => _gitCommonDir;
|
get
|
||||||
set => SetProperty(ref _gitCommonDir, value);
|
{
|
||||||
|
// 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
|
||||||
|
@ -435,12 +444,11 @@ namespace SourceGit.ViewModels
|
||||||
set;
|
set;
|
||||||
} = 0;
|
} = 0;
|
||||||
|
|
||||||
public Repository(bool isBare, string path, string gitDir, string gitCommonDir)
|
public Repository(bool isBare, string path, string gitDir)
|
||||||
{
|
{
|
||||||
IsBare = isBare;
|
IsBare = isBare;
|
||||||
FullPath = path;
|
FullPath = path;
|
||||||
GitDir = gitDir;
|
GitDir = gitDir;
|
||||||
GitCommonDir = gitCommonDir;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Open()
|
public void Open()
|
||||||
|
@ -2444,7 +2452,6 @@ namespace SourceGit.ViewModels
|
||||||
|
|
||||||
private string _fullpath = string.Empty;
|
private string _fullpath = string.Empty;
|
||||||
private string _gitDir = string.Empty;
|
private string _gitDir = string.Empty;
|
||||||
private string _gitCommonDir = string.Empty;
|
|
||||||
private Models.RepositorySettings _settings = null;
|
private Models.RepositorySettings _settings = null;
|
||||||
private Models.FilterMode _historiesFilterMode = Models.FilterMode.None;
|
private Models.FilterMode _historiesFilterMode = Models.FilterMode.None;
|
||||||
private bool _hasAllowedSignersFile = false;
|
private bool _hasAllowedSignersFile = false;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue