renderPlanText function

String renderPlanText(
  1. ChangePlan plan,
  2. String? destination,
  3. PlanAvailability availability
)

Implementation

String renderPlanText(
  ChangePlan plan,
  String? destination,
  PlanAvailability availability,
) {
  final buffer = StringBuffer()
    ..writeln('Change Plan ${plan.planId}')
    ..writeln('State: ${plan.state.name}')
    ..writeln(
      'Project summary: recipe ${plan.recipeVersion}; engine ${plan.engineVersion}',
    )
    ..writeln('Target path: ${destination ?? 'unavailable'}')
    ..writeln('Target paths: ${_values(plan.targetPaths)}')
    ..writeln('Project tree:')
    ..writeln(_lines(plan.operations.map((operation) => operation.logicalPath)))
    ..writeln('Files to create (${plan.operations.length}):')
    ..writeln('operationCount: ${plan.operations.length}');

  for (final operation in plan.operations) {
    buffer.writeln(
      '- ${operation.logicalPath} | ${operation.ownershipClass.name} | ${operation.contentHash}',
    );
    if (availability.contentReviewAvailable) {
      buffer
        ..writeln('  content:')
        ..writeln(availability.contents[operation.logicalPath]);
    }
  }
  if (!availability.contentReviewAvailable) {
    buffer.writeln('Content review unavailable (staging released).');
  }

  buffer
    ..writeln('Dependencies (exact resolved versions):')
    ..writeln(
      _lines(
        plan.dependencies.entries.map(
          (entry) => '${entry.key}: ${entry.value}',
        ),
      ),
    )
    ..writeln('Staging commands already run:')
    ..writeln(_commands(plan.stagingCommands))
    ..writeln('Target regeneration commands:')
    ..writeln(_commands(plan.regenerationCommands))
    ..writeln('Regeneration path set: ${_values(plan.regenerationPathSet)}')
    ..writeln('Toolchain exceptions:')
    ..writeln(
      _lines(
        plan.toolchainExceptions.map(
          (exception) =>
              '${exception.logicalPath} | ${exception.reason} | regenerated by: ${exception.regeneratedBy}',
        ),
      ),
    )
    ..writeln('Validation plan:')
    ..writeln(_commands(plan.validationCommands))
    ..writeln('Warnings: ${_values(plan.warnings)}')
    ..writeln('Manual steps: ${_values(plan.manualSteps)}')
    ..writeln('Rollback capability/limits: ${plan.rollbackCapability.name}')
    ..writeln('Generation already happened; Apply will not re-run generation.');
  return buffer.toString();
}