applyDiffToFile function

Future<EditResult> applyDiffToFile(
  1. String filePath,
  2. String diff, {
  3. bool createBackup = true,
})

Apply a diff to a file.

Implementation

Future<EditResult> applyDiffToFile(
  String filePath,
  String diff, {
  bool createBackup = true,
}) async {
  final file = File(filePath);
  if (!await file.exists()) {
    return EditResult(
      success: false,
      newContent: '',
      editsApplied: 0,
      errors: ['File not found: $filePath'],
    );
  }

  final content = await file.readAsString();
  String? backupPath;

  if (createBackup) {
    backupPath = '$filePath.bak.${DateTime.now().millisecondsSinceEpoch}';
    await File(backupPath).writeAsString(content);
  }

  try {
    final newContent = applyDiff(content, diff);
    await file.writeAsString(newContent);
    final hunks = parseUnifiedDiff(diff);
    return EditResult(
      success: true,
      newContent: newContent,
      editsApplied: hunks.length,
      backupPath: backupPath,
    );
  } catch (e) {
    return EditResult(
      success: false,
      newContent: content,
      editsApplied: 0,
      errors: ['Failed to apply diff: $e'],
      backupPath: backupPath,
    );
  }
}