mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2025-01-11 23:57:21 -08:00
refactor: read git output once time instead of line-by-line
This commit is contained in:
parent
986c27e1cb
commit
f2f8a64b84
2 changed files with 41 additions and 26 deletions
|
@ -19,29 +19,35 @@ namespace SourceGit.Commands
|
||||||
|
|
||||||
public List<Models.Branch> Result()
|
public List<Models.Branch> Result()
|
||||||
{
|
{
|
||||||
Exec();
|
var branches = new List<Models.Branch>();
|
||||||
|
var rs = ReadToEnd();
|
||||||
|
if (!rs.IsSuccess)
|
||||||
|
return branches;
|
||||||
|
|
||||||
foreach (var b in _needQueryTrackStatus)
|
var lines = rs.StdOut.Split('\n', StringSplitOptions.RemoveEmptyEntries);
|
||||||
b.TrackStatus = new QueryTrackStatus(WorkingDirectory, b.Name, b.Upstream).Result();
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
return _branches;
|
var b = ParseLine(line);
|
||||||
|
if (b != null)
|
||||||
|
branches.Add(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnReadline(string line)
|
return branches;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Models.Branch ParseLine(string line)
|
||||||
{
|
{
|
||||||
var parts = line.Split('$');
|
var parts = line.Split('$');
|
||||||
if (parts.Length != 5)
|
if (parts.Length != 5)
|
||||||
return;
|
return null;
|
||||||
|
|
||||||
var branch = new Models.Branch();
|
var branch = new Models.Branch();
|
||||||
var refName = parts[0];
|
var refName = parts[0];
|
||||||
if (refName.EndsWith("/HEAD", StringComparison.Ordinal))
|
if (refName.EndsWith("/HEAD", StringComparison.Ordinal))
|
||||||
return;
|
return null;
|
||||||
|
|
||||||
if (refName.StartsWith(PREFIX_DETACHED_AT, StringComparison.Ordinal) || refName.StartsWith(PREFIX_DETACHED_FROM, StringComparison.Ordinal))
|
branch.IsDetachedHead = refName.StartsWith(PREFIX_DETACHED_AT, StringComparison.Ordinal) ||
|
||||||
{
|
refName.StartsWith(PREFIX_DETACHED_FROM, StringComparison.Ordinal);
|
||||||
branch.IsDetachedHead = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (refName.StartsWith(PREFIX_LOCAL, StringComparison.Ordinal))
|
if (refName.StartsWith(PREFIX_LOCAL, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
|
@ -53,7 +59,7 @@ namespace SourceGit.Commands
|
||||||
var name = refName.Substring(PREFIX_REMOTE.Length);
|
var name = refName.Substring(PREFIX_REMOTE.Length);
|
||||||
var shortNameIdx = name.IndexOf('/', StringComparison.Ordinal);
|
var shortNameIdx = name.IndexOf('/', StringComparison.Ordinal);
|
||||||
if (shortNameIdx < 0)
|
if (shortNameIdx < 0)
|
||||||
return;
|
return null;
|
||||||
|
|
||||||
branch.Remote = name.Substring(0, shortNameIdx);
|
branch.Remote = name.Substring(0, shortNameIdx);
|
||||||
branch.Name = name.Substring(branch.Remote.Length + 1);
|
branch.Name = name.Substring(branch.Remote.Length + 1);
|
||||||
|
@ -71,14 +77,11 @@ namespace SourceGit.Commands
|
||||||
branch.Upstream = parts[3];
|
branch.Upstream = parts[3];
|
||||||
|
|
||||||
if (branch.IsLocal && !string.IsNullOrEmpty(parts[4]) && !parts[4].Equals("=", StringComparison.Ordinal))
|
if (branch.IsLocal && !string.IsNullOrEmpty(parts[4]) && !parts[4].Equals("=", StringComparison.Ordinal))
|
||||||
_needQueryTrackStatus.Add(branch);
|
branch.TrackStatus = new QueryTrackStatus(WorkingDirectory, branch.Name, branch.Upstream).Result();
|
||||||
else
|
else
|
||||||
branch.TrackStatus = new Models.BranchTrackStatus();
|
branch.TrackStatus = new Models.BranchTrackStatus();
|
||||||
|
|
||||||
_branches.Add(branch);
|
return branch;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<Models.Branch> _branches = new List<Models.Branch>();
|
|
||||||
private List<Models.Branch> _needQueryTrackStatus = new List<Models.Branch>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,31 +14,43 @@ namespace SourceGit.Commands
|
||||||
|
|
||||||
public List<Models.Tag> Result()
|
public List<Models.Tag> Result()
|
||||||
{
|
{
|
||||||
Exec();
|
var tags = new List<Models.Tag>();
|
||||||
return _loaded;
|
var rs = ReadToEnd();
|
||||||
|
if (!rs.IsSuccess)
|
||||||
|
return tags;
|
||||||
|
|
||||||
|
var lines = rs.StdOut.Split('\n', StringSplitOptions.RemoveEmptyEntries);
|
||||||
|
foreach (var line in lines)
|
||||||
|
{
|
||||||
|
var tag = ParseLine(line);
|
||||||
|
if (tag != null)
|
||||||
|
tags.Add(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnReadline(string line)
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Models.Tag ParseLine(string line)
|
||||||
{
|
{
|
||||||
var subs = line.Split('$', StringSplitOptions.RemoveEmptyEntries);
|
var subs = line.Split('$', StringSplitOptions.RemoveEmptyEntries);
|
||||||
if (subs.Length == 2)
|
if (subs.Length == 2)
|
||||||
{
|
{
|
||||||
_loaded.Add(new Models.Tag()
|
return new Models.Tag()
|
||||||
{
|
{
|
||||||
Name = subs[0].Substring(10),
|
Name = subs[0].Substring(10),
|
||||||
SHA = subs[1],
|
SHA = subs[1],
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
else if (subs.Length == 3)
|
else if (subs.Length == 3)
|
||||||
{
|
{
|
||||||
_loaded.Add(new Models.Tag()
|
return new Models.Tag()
|
||||||
{
|
{
|
||||||
Name = subs[0].Substring(10),
|
Name = subs[0].Substring(10),
|
||||||
SHA = subs[2],
|
SHA = subs[2],
|
||||||
});
|
};
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly List<Models.Tag> _loaded = new List<Models.Tag>();
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue