enhance: avoid crashing when failed to create filesystem watcher for repository (#411)

This commit is contained in:
leo 2024-08-26 17:50:13 +08:00
parent 1dd782bc42
commit ad0773be2f
No known key found for this signature in database

View file

@ -331,7 +331,15 @@ namespace SourceGit.ViewModels
_settings = new Models.RepositorySettings(); _settings = new Models.RepositorySettings();
} }
_watcher = new Models.Watcher(this); try
{
_watcher = new Models.Watcher(this);
}
catch (Exception ex)
{
App.RaiseException(string.Empty, $"Failed to start watcher for repository: '{_fullpath}'. You may need to press 'F5' to refresh repository manually!\n\nReason: {ex.Message}");
}
_histories = new Histories(this); _histories = new Histories(this);
_workingCopy = new WorkingCopy(this); _workingCopy = new WorkingCopy(this);
_stashesPage = new StashesPage(this); _stashesPage = new StashesPage(this);
@ -351,7 +359,7 @@ namespace SourceGit.ViewModels
File.WriteAllText(Path.Combine(_gitDir, "sourcegit.settings"), settingsSerialized); File.WriteAllText(Path.Combine(_gitDir, "sourcegit.settings"), settingsSerialized);
_settings = null; _settings = null;
_watcher.Dispose(); _watcher?.Dispose();
_histories.Cleanup(); _histories.Cleanup();
_workingCopy.Cleanup(); _workingCopy.Cleanup();
_stashesPage.Cleanup(); _stashesPage.Cleanup();
@ -580,19 +588,33 @@ namespace SourceGit.ViewModels
public void SetWatcherEnabled(bool enabled) public void SetWatcherEnabled(bool enabled)
{ {
if (_watcher != null) _watcher?.SetEnabled(enabled);
_watcher.SetEnabled(enabled);
} }
public void MarkBranchesDirtyManually() public void MarkBranchesDirtyManually()
{ {
if (_watcher != null) if (_watcher == null)
{
Task.Run(() =>
{
RefreshBranches();
RefreshCommits();
});
Task.Run(RefreshWorkingCopyChanges);
Task.Run(RefreshWorktrees);
}
else
{
_watcher.MarkBranchDirtyManually(); _watcher.MarkBranchDirtyManually();
}
} }
public void MarkWorkingCopyDirtyManually() public void MarkWorkingCopyDirtyManually()
{ {
if (_watcher != null) if (_watcher == null)
Task.Run(RefreshWorkingCopyChanges);
else
_watcher.MarkWorkingCopyDirtyManually(); _watcher.MarkWorkingCopyDirtyManually();
} }
@ -787,9 +809,7 @@ namespace SourceGit.ViewModels
public void RefreshSubmodules() public void RefreshSubmodules()
{ {
var submodules = new Commands.QuerySubmodules(_fullpath).Result(); var submodules = new Commands.QuerySubmodules(_fullpath).Result();
if (_watcher != null) _watcher?.SetSubmodules(submodules);
_watcher.SetSubmodules(submodules);
Dispatcher.UIThread.Invoke(() => Submodules = submodules); Dispatcher.UIThread.Invoke(() => Submodules = submodules);
} }