Skip to content

Commit 6ee7703

Browse files
committed
Avoid stack overflow by doing breadth first search without recursion
1 parent 7f09e82 commit 6ee7703

File tree

1 file changed

+12
-3
lines changed

1 file changed

+12
-3
lines changed

src/NerdBank.GitVersioning/GitExtensions.cs

+12-3
Original file line numberDiff line numberDiff line change
@@ -823,11 +823,20 @@ private static void AddReachableCommitsFrom(Commit startingCommit, HashSet<Commi
823823
Requires.NotNull(startingCommit, nameof(startingCommit));
824824
Requires.NotNull(set, nameof(set));
825825

826-
if (set.Add(startingCommit))
826+
var stack = new Stack<Commit>();
827+
stack.Push(startingCommit);
828+
while (stack.Count > 0)
827829
{
828-
foreach (var parent in startingCommit.Parents)
830+
var currentCommit = stack.Pop();
831+
if (set.Add(currentCommit))
829832
{
830-
AddReachableCommitsFrom(parent, set);
833+
foreach (var parent in currentCommit.Parents)
834+
{
835+
if (!set.Contains(parent))
836+
{
837+
stack.Push(parent);
838+
}
839+
}
831840
}
832841
}
833842
}

0 commit comments

Comments
 (0)