applyPhase1 function

ApplyPhase1Result applyPhase1({
  1. required ChangePlan plan,
  2. required PlanLocationRecord location,
  3. ApplyFileSystem fileSystem = const ApplyFileSystem(),
  4. ApplyObservations? observations,
  5. bool runPreflight = true,
})

Implementation

ApplyPhase1Result applyPhase1({
  required ChangePlan plan,
  required PlanLocationRecord location,
  ApplyFileSystem fileSystem = const ApplyFileSystem(),
  ApplyObservations? observations,
  bool runPreflight = true,
}) {
  if (runPreflight) {
    applyPreflight(
      plan: plan,
      stagingRoot: location.stagingRoot,
      canonicalDestination: location.canonicalDestination,
      fileSystem: fileSystem,
      observations: observations,
    );
  }
  final materialized = materializePhase1(
    plan: plan,
    stagingRoot: location.stagingRoot,
    canonicalDestination: location.canonicalDestination,
    fileSystem: fileSystem,
  );
  final invariant = checkReviewedContentInvariant(
    plan: plan,
    canonicalDestination: location.canonicalDestination,
    fileSystem: fileSystem,
  );
  if (!invariant.invariantHolds) {
    throw ApplyException(
      'Reviewed-content invariant failed: ${invariant.violations.map((v) => v.logicalPath).join(', ')}.',
      exitCode: ExitCodes.applyFailedPartialRecoveryOrManualRequired,
    );
  }
  return ApplyPhase1Result(
    filesWritten: materialized.filesWritten,
    invariantHolds: true,
  );
}