public static List <GitCommit> ParseLog(string log) { const string Separator = "\x00\x00"; var s = log.AsSpan(); var cs = Separator.AsSpan(); var commits = new List <GitCommit>(); while (!s.IsEmpty) { var nextIndex = s.IndexOf(cs); if (nextIndex == -1) { nextIndex = s.Length; } var entry = s.Slice(0, nextIndex).TrimStart('\n'); var commit = ParseCommit(entry.ToString()); if (commit == null) { break; //maybe throw? } commits.Add(commit); s = s.Slice(nextIndex + cs.Length); } return(commits); }