Index: sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart b/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
index b23eb14dd20543022a56a113ae13b38e813ada6b..ca83a878ec73d9fa23d3c0ac8ac9680853e21fa4 100644 |
--- a/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
+++ b/sdk/lib/_internal/pub/lib/src/barback/load_all_transformers.dart |
@@ -6,14 +6,16 @@ library pub.load_all_transformers; |
import 'dart:async'; |
+import 'package:barback/barback.dart'; |
+ |
import '../log.dart' as log; |
import '../package_graph.dart'; |
import '../utils.dart'; |
import 'asset_environment.dart'; |
import 'barback_server.dart'; |
+import 'dependency_computer.dart'; |
import 'transformer_id.dart'; |
import 'transformer_loader.dart'; |
-import 'transformers_needed_by_transformers.dart'; |
/// Loads all transformers depended on by packages in [environment]. |
/// |
@@ -23,10 +25,30 @@ import 'transformers_needed_by_transformers.dart'; |
/// |
/// Any built-in transformers that are provided by the environment will |
/// automatically be added to the end of the root package's cascade. |
+/// |
+/// If [entrypoints] is passed, only transformers necessary to run those |
+/// entrypoints will be loaded. |
Future loadAllTransformers(AssetEnvironment environment, |
- BarbackServer transformerServer) async { |
- var transformersNeededByTransformers = |
- computeTransformersNeededByTransformers(environment.graph); |
+ BarbackServer transformerServer, {Iterable<AssetId> entrypoints}) async { |
+ var dependencyComputer = new DependencyComputer(environment.graph); |
+ |
+ // If we only need to load transformers for a specific set of entrypoints, |
+ // remove any other transformers from [transformersNeededByTransformers]. |
+ var necessaryTransformers; |
+ if (entrypoints != null) { |
+ if (entrypoints.isEmpty) return; |
+ |
+ necessaryTransformers = unionAll(entrypoints.map( |
+ dependencyComputer.transformersNeededByLibrary)); |
+ |
+ if (necessaryTransformers.isEmpty) { |
+ log.fine("No transformers are needed for ${toSentence(entrypoints)}."); |
+ return; |
+ } |
+ } |
+ |
+ var transformersNeededByTransformers = dependencyComputer |
+ .transformersNeededByTransformers(necessaryTransformers); |
var buffer = new StringBuffer(); |
buffer.writeln("Transformer dependencies:"); |