Skip to content

Commit 62bd702

Browse files
committed
Add option to skip based on primary input content.
1 parent 41d91a1 commit 62bd702

File tree

1 file changed

+55
-27
lines changed

1 file changed

+55
-27
lines changed

build_runner_core/lib/src/generate/build.dart

Lines changed: 55 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -501,30 +501,52 @@ class Build {
501501
unusedAssets.addAll(assets);
502502
}
503503

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+
504524
final logger = buildLog.loggerFor(
505525
phase: phase,
506526
primaryInput: primaryInput,
507527
lazy: lazy,
508528
);
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+
}
528550

529551
// Update the state for all the `builderOutputs` nodes based on what was
530552
// read and written.
@@ -542,14 +564,18 @@ class Build {
542564
),
543565
);
544566

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+
}
553579

554580
return readerWriter.assetsWritten;
555581
});
@@ -730,6 +756,8 @@ class Build {
730756
}
731757
}
732758

759+
var once = false;
760+
733761
/// Checks and returns whether any [outputs] need to be updated in
734762
/// [phaseNumber] for [primaryInput].
735763
///

0 commit comments

Comments
 (0)