writeFiles method
Writes multiple files to the file system atomically.
Attempts to write all files and provides rollback capability if any operation fails to maintain consistency.
Parameters:
files: List of GeneratedFile instances to writeconfig: Asset configuration for path resolution
Returns a ValidationResult indicating success or failure.
Implementation
ValidationResult writeFiles(List<GeneratedFile> files, AssetConfig config) {
final errors = <ValidationError>[];
final warnings = <ValidationWarning>[];
final suggestions = <String>[];
final writtenFiles = <String>[];
try {
// Create directory structure first
final dirResult = createDirectoryStructure(config);
if (!dirResult.isValid) {
return dirResult;
}
// Write each file
for (final file in files) {
try {
_writeFileSafely(file);
writtenFiles.add(file.path);
} catch (e) {
errors.add(ValidationError(
message: 'Failed to write file ${file.path}: $e',
type: ValidationErrorType.fileSystem,
));
// Attempt rollback for already written files
_rollbackFiles(writtenFiles);
suggestions.add('Check write permissions for the target directory');
suggestions.add('Ensure sufficient disk space is available');
suggestions.add('Verify the file path is valid');
return ValidationResult.failure(
errors: errors,
suggestions: suggestions,
);
}
}
return ValidationResult.success(
warnings: warnings,
);
} catch (e) {
errors.add(ValidationError(
message: 'Unexpected error during file writing: $e',
type: ValidationErrorType.fileSystem,
));
return ValidationResult.failure(
errors: errors,
suggestions: suggestions,
);
}
}