mirror of
https://fastgit.cc/github.com/sourcegit-scm/sourcegit
synced 2026-04-23 10:22:13 +08:00
code_style: add CreateIssueTrackerCommand to generate Commands.IssueTracker
Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
@@ -14,18 +14,17 @@ namespace SourceGit.Commands
|
||||
_storage = storage;
|
||||
}
|
||||
|
||||
public async Task<List<Models.IssueTracker>> ReadAllAsync(bool isShared)
|
||||
public async Task ReadAllAsync(List<Models.IssueTracker> outs, bool isShared)
|
||||
{
|
||||
if (!File.Exists(_storage))
|
||||
return [];
|
||||
return;
|
||||
|
||||
Args = $"config -f {_storage.Quoted()} -l";
|
||||
|
||||
var output = await ReadToEndAsync().ConfigureAwait(false);
|
||||
var rs = new List<Models.IssueTracker>();
|
||||
if (output.IsSuccess)
|
||||
var rs = await ReadToEndAsync().ConfigureAwait(false);
|
||||
if (rs.IsSuccess)
|
||||
{
|
||||
var lines = output.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
|
||||
var lines = rs.StdOut.Split(['\r', '\n'], StringSplitOptions.RemoveEmptyEntries);
|
||||
foreach (var line in lines)
|
||||
{
|
||||
var parts = line.Split('=', 2);
|
||||
@@ -43,19 +42,17 @@ namespace SourceGit.Commands
|
||||
var prefixLen = "issuetracker.".Length;
|
||||
var suffixLen = ".regex".Length;
|
||||
var ruleName = key.Substring(prefixLen, key.Length - prefixLen - suffixLen);
|
||||
FindOrAdd(rs, ruleName, isShared).RegexString = value;
|
||||
FindOrAdd(outs, ruleName, isShared).RegexString = value;
|
||||
}
|
||||
else if (key.EndsWith(".url", StringComparison.Ordinal))
|
||||
{
|
||||
var prefixLen = "issuetracker.".Length;
|
||||
var suffixLen = ".url".Length;
|
||||
var ruleName = key.Substring(prefixLen, key.Length - prefixLen - suffixLen);
|
||||
FindOrAdd(rs, ruleName, isShared).URLTemplate = value;
|
||||
FindOrAdd(outs, ruleName, isShared).URLTemplate = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rs;
|
||||
}
|
||||
|
||||
public async Task<bool> AddAsync(Models.IssueTracker rule)
|
||||
@@ -74,6 +71,9 @@ namespace SourceGit.Commands
|
||||
|
||||
public async Task<bool> RemoveAsync(Models.IssueTracker rule)
|
||||
{
|
||||
if (!File.Exists(_storage))
|
||||
return true;
|
||||
|
||||
Args = $"config -f {_storage.Quoted()} --remove-section issuetracker.{rule.Name.Quoted()}";
|
||||
return await ExecAsync().ConfigureAwait(false);
|
||||
}
|
||||
|
||||
@@ -693,7 +693,7 @@ namespace SourceGit.ViewModels
|
||||
URLTemplate = url,
|
||||
};
|
||||
|
||||
var succ = await new Commands.IssueTracker(_fullpath, $"{_gitDir}/sourcegit.issuetracker").AddAsync(rule);
|
||||
var succ = await CreateIssueTrackerCommand(false).AddAsync(rule);
|
||||
if (succ)
|
||||
{
|
||||
IssueTrackers.Add(rule);
|
||||
@@ -705,27 +705,15 @@ namespace SourceGit.ViewModels
|
||||
|
||||
public async Task RemoveIssueTrackerAsync(Models.IssueTracker rule)
|
||||
{
|
||||
var storage = rule.IsShared ? $"{_fullpath}/.issuetracker" : $"{_gitDir}/sourcegit.issuetracker";
|
||||
var succ = await new Commands.IssueTracker(_fullpath, storage).RemoveAsync(rule);
|
||||
var succ = await CreateIssueTrackerCommand(rule.IsShared).RemoveAsync(rule);
|
||||
if (succ)
|
||||
IssueTrackers.Remove(rule);
|
||||
}
|
||||
|
||||
public async Task ChangeIssueTrackerShareModeAsync(Models.IssueTracker rule)
|
||||
{
|
||||
var shared = new Commands.IssueTracker(_fullpath, $"{_fullpath}/.issuetracker");
|
||||
var local = new Commands.IssueTracker(_fullpath, $"{_gitDir}/sourcegit.issuetracker");
|
||||
|
||||
if (rule.IsShared)
|
||||
{
|
||||
await local.RemoveAsync(rule);
|
||||
await shared.AddAsync(rule);
|
||||
}
|
||||
else
|
||||
{
|
||||
await local.AddAsync(rule);
|
||||
await shared.RemoveAsync(rule);
|
||||
}
|
||||
await CreateIssueTrackerCommand(!rule.IsShared).RemoveAsync(rule);
|
||||
await CreateIssueTrackerCommand(rule.IsShared).AddAsync(rule);
|
||||
}
|
||||
|
||||
public void RefreshAll()
|
||||
@@ -740,13 +728,13 @@ namespace SourceGit.ViewModels
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
var sharedIssueTrackers = await new Commands.IssueTracker(_fullpath, $"{_fullpath}/.issuetracker").ReadAllAsync(true).ConfigureAwait(false);
|
||||
var localIssueTrackers = await new Commands.IssueTracker(_fullpath, $"{_gitDir}/sourcegit.issuetracker").ReadAllAsync(false).ConfigureAwait(false);
|
||||
var issuetrackers = new List<Models.IssueTracker>();
|
||||
await CreateIssueTrackerCommand(true).ReadAllAsync(issuetrackers, true).ConfigureAwait(false);
|
||||
await CreateIssueTrackerCommand(false).ReadAllAsync(issuetrackers, false).ConfigureAwait(false);
|
||||
Dispatcher.UIThread.Post(() =>
|
||||
{
|
||||
IssueTrackers.Clear();
|
||||
IssueTrackers.AddRange(sharedIssueTrackers);
|
||||
IssueTrackers.AddRange(localIssueTrackers);
|
||||
IssueTrackers.AddRange(issuetrackers);
|
||||
});
|
||||
|
||||
var config = await new Commands.Config(_fullpath).ReadAllAsync().ConfigureAwait(false);
|
||||
@@ -2909,6 +2897,12 @@ namespace SourceGit.ViewModels
|
||||
return null;
|
||||
}
|
||||
|
||||
private Commands.IssueTracker CreateIssueTrackerCommand(bool shared)
|
||||
{
|
||||
var storage = shared ? $"{_fullpath}/.issuetracker" : $"{_gitDir}/sourcegit.issuetracker";
|
||||
return new Commands.IssueTracker(_fullpath, storage);
|
||||
}
|
||||
|
||||
private BranchTreeNode.Builder BuildBranchTree(List<Models.Branch> branches, List<Models.Remote> remotes)
|
||||
{
|
||||
var builder = new BranchTreeNode.Builder(_settings.LocalBranchSortMode, _settings.RemoteBranchSortMode);
|
||||
|
||||
Reference in New Issue
Block a user