Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit e5e1e31

Browse files
Another HashSet to the rescue
Method | Mean | Error | StdDev | ----------------------------- |---------:|----------:|----------:| OriginalTreeBuilderBenchmark | 63.59 ms | 0.9887 ms | 0.9248 ms | CurrentTreeBuilderBenchmark | 24.41 ms | 0.4952 ms | 0.7854 ms |
1 parent 5871a87 commit e5e1e31

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

src/GitHub.Api/UI/TreeBuilder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ internal static FileTreeNode BuildTreeRoot(IList<GitStatusEntry> newEntries, Lis
7777
Guard.ArgumentNotNullOrEmpty(newEntries, "newEntries");
7878

7979
var newEntriesSetByPath = new HashSet<string>(newEntries.Select(entry => entry.Path));
80+
var gitStatusEntriesSetByPath = new HashSet<string>(gitStatusEntries.Select(entry => entry.Path));
8081

8182
// Remove what got nuked
8283
for (var index = 0; index < gitStatusEntries.Count;)
@@ -95,7 +96,7 @@ internal static FileTreeNode BuildTreeRoot(IList<GitStatusEntry> newEntries, Lis
9596
// Remove folding state of nuked items
9697
for (var index = 0; index < foldedTreeEntries.Count;)
9798
{
98-
if (!newEntries.Any(e => e.Path.IndexOf(foldedTreeEntries[index]) == 0))
99+
if (newEntries.All(e => e.Path.IndexOf(foldedTreeEntries[index], StringComparison.CurrentCulture) != 0))
99100
{
100101
foldedTreeEntries.RemoveAt(index);
101102
}
@@ -109,7 +110,7 @@ internal static FileTreeNode BuildTreeRoot(IList<GitStatusEntry> newEntries, Lis
109110
for (var index = 0; index < newEntries.Count; ++index)
110111
{
111112
var entry = newEntries[index];
112-
if (!gitStatusEntries.Contains(entry))
113+
if (!gitStatusEntriesSetByPath.Contains(entry.Path))
113114
{
114115
gitStatusEntries.Add(entry);
115116
gitCommitTargets.Add(new GitCommitTarget());

0 commit comments

Comments
 (0)