parse static method

List<GitFileDiff> parse(
  1. String unifiedDiff
)

Parses a unified diff string into a list of GitFileDiff objects.

Implementation

static List<GitFileDiff> parse(String unifiedDiff) {
  if (unifiedDiff.trim().isEmpty) return const [];

  final rawLines = unifiedDiff.split('\n');
  final fileDiffs = <GitFileDiff>[];

  var sectionStart = 0;
  ({String oldPath, String newPath})? currentHeader;

  for (var i = 0; i < rawLines.length; i++) {
    final line = rawLines[i];
    final diffMatch =
        _diffGitQuotedPattern.firstMatch(line) ??
        _diffGitUnquotedPattern.firstMatch(line);
    if (diffMatch == null) continue;

    final prevDiff = _parseFileSection(
      rawLines,
      sectionStart,
      i,
      currentHeader,
    );
    if (prevDiff != null) fileDiffs.add(prevDiff);

    currentHeader = (
      oldPath: _cleanPath(diffMatch.group(1)!),
      newPath: _cleanPath(diffMatch.group(2)!),
    );
    sectionStart = i + 1;
  }

  final lastDiff = _parseFileSection(
    rawLines,
    sectionStart,
    rawLines.length,
    currentHeader,
  );
  if (lastDiff != null) fileDiffs.add(lastDiff);

  return List.unmodifiable(fileDiffs);
}