parse static method
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);
}