enqueueBuild method

void enqueueBuild(
  1. int step
)

Implementation

void enqueueBuild(int step) async {
  if (!mutex.isLocked) {
    lastBuild = DateTime.now();
    await mutex.protect(() async {
      enqueuedBuild = step;
      while (enqueuedBuild != null) {
        var nextStep = enqueuedBuild!;
        enqueuedBuild = null;
        currentBuild = nextStep;
        cancellationToken = CancellationToken();
        try {
          await performBuild(nextStep, cancellationToken);
        } catch (error, stack) {
          logger.cln().err("Failed to rebuild: $error\n$stack");
        }
      }
    });
    return;
  }

  if (DateTime.now().difference(lastBuild).inMilliseconds.abs() < 250) {
    return;
  }

  if (enqueuedBuild == null) {
    enqueuedBuild = step;
  } else {
    enqueuedBuild = min(step, enqueuedBuild!);
  }

  if (enqueuedBuild == currentBuild) {
    // Interrupt
    logger.cln().info("Interrupting build");
    cancelController.add(enqueuedBuild!);
    cancellationToken.cancel();
  }
}