diff --git a/src/Commands/SharedIssueTracker.cs b/src/Commands/SharedIssueTracker.cs index 3e96fbeb7..3692d9ba4 100644 --- a/src/Commands/SharedIssueTracker.cs +++ b/src/Commands/SharedIssueTracker.cs @@ -58,6 +58,30 @@ public SharedIssueTracker(string repo) return rs; } + public async Task HasAnyAsync() + { + if (!File.Exists(_file)) + return false; + + Args = $"config -f {_file.Quoted()} -l"; + + var output = await ReadToEndAsync().ConfigureAwait(false); + + if (output.IsSuccess) + foreach (var line in output.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries)) + { + var parts = line.Split('=', 2); + + if (parts.Length < 2) + continue; + + if (parts[0].StartsWith("issuetracker.", StringComparison.Ordinal)) + return true; + } + + return false; + } + public async Task AddAsync(Models.IssueTrackerRule rule) { Args = $"config -f {_file.Quoted()} issuetracker.{rule.Name.Quoted()}.regex {rule.RegexString.Quoted()}"; diff --git a/src/ViewModels/RepositoryConfigure.cs b/src/ViewModels/RepositoryConfigure.cs index 72f7c2e89..40a5cf3dc 100644 --- a/src/ViewModels/RepositoryConfigure.cs +++ b/src/ViewModels/RepositoryConfigure.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.IO; using System.Threading.Tasks; using Avalonia.Collections; @@ -305,10 +306,24 @@ public async Task ChangeIssueTrackerShareModeAsync() if (_selectedIssueTrackerRule is not { } rule) return; + var sharedTracker = new Commands.SharedIssueTracker(_repo.FullPath); + if (rule.IsShared) - await new Commands.SharedIssueTracker(_repo.FullPath).AddAsync(rule); + await sharedTracker.AddAsync(rule); else - await new Commands.SharedIssueTracker(_repo.FullPath).RemoveAsync(rule); + { + await sharedTracker.RemoveAsync(rule); + + if (await sharedTracker.HasAnyAsync()) + return; + + var filePath = Path.Combine(_repo.FullPath, ".issuetracker"); + + if (!File.Exists(filePath) || !string.IsNullOrEmpty(await File.ReadAllTextAsync(filePath))) + return; + + File.Delete(filePath); + } } public void AddNewCustomAction()