Skip to content

Commit f2f8a64

Browse files
committed
refactor: read git output once time instead of line-by-line
1 parent 986c27e commit f2f8a64

File tree

2 files changed

+41
-26
lines changed

2 files changed

+41
-26
lines changed

src/Commands/QueryBranches.cs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,35 @@ public QueryBranches(string repo)
1919

2020
public List<Models.Branch> Result()
2121
{
22-
Exec();
22+
var branches = new List<Models.Branch>();
23+
var rs = ReadToEnd();
24+
if (!rs.IsSuccess)
25+
return branches;
2326

24-
foreach (var b in _needQueryTrackStatus)
25-
b.TrackStatus = new QueryTrackStatus(WorkingDirectory, b.Name, b.Upstream).Result();
27+
var lines = rs.StdOut.Split('\n', StringSplitOptions.RemoveEmptyEntries);
28+
foreach (var line in lines)
29+
{
30+
var b = ParseLine(line);
31+
if (b != null)
32+
branches.Add(b);
33+
}
2634

27-
return _branches;
35+
return branches;
2836
}
2937

30-
protected override void OnReadline(string line)
38+
private Models.Branch ParseLine(string line)
3139
{
3240
var parts = line.Split('$');
3341
if (parts.Length != 5)
34-
return;
42+
return null;
3543

3644
var branch = new Models.Branch();
3745
var refName = parts[0];
3846
if (refName.EndsWith("/HEAD", StringComparison.Ordinal))
39-
return;
47+
return null;
4048

41-
if (refName.StartsWith(PREFIX_DETACHED_AT, StringComparison.Ordinal) || refName.StartsWith(PREFIX_DETACHED_FROM, StringComparison.Ordinal))
42-
{
43-
branch.IsDetachedHead = true;
44-
}
49+
branch.IsDetachedHead = refName.StartsWith(PREFIX_DETACHED_AT, StringComparison.Ordinal) ||
50+
refName.StartsWith(PREFIX_DETACHED_FROM, StringComparison.Ordinal);
4551

4652
if (refName.StartsWith(PREFIX_LOCAL, StringComparison.Ordinal))
4753
{
@@ -53,7 +59,7 @@ protected override void OnReadline(string line)
5359
var name = refName.Substring(PREFIX_REMOTE.Length);
5460
var shortNameIdx = name.IndexOf('/', StringComparison.Ordinal);
5561
if (shortNameIdx < 0)
56-
return;
62+
return null;
5763

5864
branch.Remote = name.Substring(0, shortNameIdx);
5965
branch.Name = name.Substring(branch.Remote.Length + 1);
@@ -71,14 +77,11 @@ protected override void OnReadline(string line)
7177
branch.Upstream = parts[3];
7278

7379
if (branch.IsLocal && !string.IsNullOrEmpty(parts[4]) && !parts[4].Equals("=", StringComparison.Ordinal))
74-
_needQueryTrackStatus.Add(branch);
80+
branch.TrackStatus = new QueryTrackStatus(WorkingDirectory, branch.Name, branch.Upstream).Result();
7581
else
7682
branch.TrackStatus = new Models.BranchTrackStatus();
7783

78-
_branches.Add(branch);
84+
return branch;
7985
}
80-
81-
private readonly List<Models.Branch> _branches = new List<Models.Branch>();
82-
private List<Models.Branch> _needQueryTrackStatus = new List<Models.Branch>();
8386
}
8487
}

src/Commands/QueryTags.cs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,43 @@ public QueryTags(string repo)
1414

1515
public List<Models.Tag> Result()
1616
{
17-
Exec();
18-
return _loaded;
17+
var tags = new List<Models.Tag>();
18+
var rs = ReadToEnd();
19+
if (!rs.IsSuccess)
20+
return tags;
21+
22+
var lines = rs.StdOut.Split('\n', StringSplitOptions.RemoveEmptyEntries);
23+
foreach (var line in lines)
24+
{
25+
var tag = ParseLine(line);
26+
if (tag != null)
27+
tags.Add(tag);
28+
}
29+
30+
return tags;
1931
}
2032

21-
protected override void OnReadline(string line)
33+
private Models.Tag ParseLine(string line)
2234
{
2335
var subs = line.Split('$', StringSplitOptions.RemoveEmptyEntries);
2436
if (subs.Length == 2)
2537
{
26-
_loaded.Add(new Models.Tag()
38+
return new Models.Tag()
2739
{
2840
Name = subs[0].Substring(10),
2941
SHA = subs[1],
30-
});
42+
};
3143
}
3244
else if (subs.Length == 3)
3345
{
34-
_loaded.Add(new Models.Tag()
46+
return new Models.Tag()
3547
{
3648
Name = subs[0].Substring(10),
3749
SHA = subs[2],
38-
});
50+
};
3951
}
40-
}
4152

42-
private readonly List<Models.Tag> _loaded = new List<Models.Tag>();
53+
return null;
54+
}
4355
}
4456
}

0 commit comments

Comments
 (0)