applyDiff function
Apply a unified diff to file content.
Implementation
String applyDiff(String content, String diff) {
final hunks = parseUnifiedDiff(diff);
if (hunks.isEmpty) return content;
final originalLines = content.split('\n');
final result = <String>[];
var srcLine = 0; // 0-based index into originalLines
for (final hunk in hunks) {
final hunkStart = hunk.oldStart - 1; // Convert to 0-based
// Copy lines before this hunk
while (srcLine < hunkStart && srcLine < originalLines.length) {
result.add(originalLines[srcLine]);
srcLine++;
}
// Apply hunk
for (final line in hunk.lines) {
switch (line.type) {
case DiffLineType.context:
// Advance source, copy to result
if (srcLine < originalLines.length) {
result.add(originalLines[srcLine]);
srcLine++;
}
break;
case DiffLineType.remove:
// Skip source line
srcLine++;
break;
case DiffLineType.add:
// Add new line to result
result.add(line.content);
break;
}
}
}
// Copy remaining lines
while (srcLine < originalLines.length) {
result.add(originalLines[srcLine]);
srcLine++;
}
return result.join('\n');
}