@@ -501,30 +501,52 @@ class Build {
501
501
unusedAssets.addAll (assets);
502
502
}
503
503
504
+ var reallyBuild = true ;
505
+ final buildRunnerOptions = phase.builderOptions.config['build_runner' ];
506
+ if (buildRunnerOptions != null ) {
507
+ String ? primaryInputSource;
508
+ final buildIfs = (buildRunnerOptions as Map )['build_if' ];
509
+ if (buildIfs != null ) {
510
+ for (final entry in (buildIfs as Map ).entries) {
511
+ if (entry.key == 'primary_input_contains' ) {
512
+ primaryInputSource ?? = await readerWriter.readAsString (
513
+ primaryInput,
514
+ );
515
+ if (! primaryInputSource.contains (entry.value as String )) {
516
+ reallyBuild = false ;
517
+ break ;
518
+ }
519
+ }
520
+ }
521
+ }
522
+ }
523
+
504
524
final logger = buildLog.loggerFor (
505
525
phase: phase,
506
526
primaryInput: primaryInput,
507
527
lazy: lazy,
508
528
);
509
- await TimedActivity .build.runAsync (
510
- () => tracker.trackStage (
511
- 'Build' ,
512
- () => runBuilder (
513
- builder,
514
- [primaryInput],
515
- readerWriter,
516
- readerWriter,
517
- PerformanceTrackingResolvers (options.resolvers, tracker),
518
- logger: logger,
519
- resourceManager: resourceManager,
520
- stageTracker: tracker,
521
- reportUnusedAssetsForInput: reportUnusedAssetsForInput,
522
- packageConfig: options.packageGraph.asPackageConfig,
523
- ).catchError ((void _) {
524
- // Errors tracked through the logger.
525
- }),
526
- ),
527
- );
529
+ if (reallyBuild) {
530
+ await TimedActivity .build.runAsync (
531
+ () => tracker.trackStage (
532
+ 'Build' ,
533
+ () => runBuilder (
534
+ builder,
535
+ [primaryInput],
536
+ readerWriter,
537
+ readerWriter,
538
+ PerformanceTrackingResolvers (options.resolvers, tracker),
539
+ logger: logger,
540
+ resourceManager: resourceManager,
541
+ stageTracker: tracker,
542
+ reportUnusedAssetsForInput: reportUnusedAssetsForInput,
543
+ packageConfig: options.packageGraph.asPackageConfig,
544
+ ).catchError ((void _) {
545
+ // Errors tracked through the logger.
546
+ }),
547
+ ),
548
+ );
549
+ }
528
550
529
551
// Update the state for all the `builderOutputs` nodes based on what was
530
552
// read and written.
@@ -542,14 +564,18 @@ class Build {
542
564
),
543
565
);
544
566
545
- buildLog.finishStep (
546
- phase: phase,
547
- anyOutputs: readerWriter.assetsWritten.isNotEmpty,
548
- anyChangedOutputs: readerWriter.assetsWritten.any (
549
- changedOutputs.contains,
550
- ),
551
- lazy: lazy,
552
- );
567
+ if (reallyBuild) {
568
+ buildLog.finishStep (
569
+ phase: phase,
570
+ anyOutputs: readerWriter.assetsWritten.isNotEmpty,
571
+ anyChangedOutputs: readerWriter.assetsWritten.any (
572
+ changedOutputs.contains,
573
+ ),
574
+ lazy: lazy,
575
+ );
576
+ } else {
577
+ buildLog.skipStep (phase: phase, lazy: lazy);
578
+ }
553
579
554
580
return readerWriter.assetsWritten;
555
581
});
@@ -730,6 +756,8 @@ class Build {
730
756
}
731
757
}
732
758
759
+ var once = false ;
760
+
733
761
/// Checks and returns whether any [outputs] need to be updated in
734
762
/// [phaseNumber] for [primaryInput] .
735
763
///
0 commit comments