@@ -37,17 +37,18 @@ class BuildImpl {
3737 final AssetReader _reader;
3838 final AssetWriter _writer;
3939 final PackageGraph _packageGraph;
40- final List <List <Phase >> _phaseGroups ;
40+ final List <List <BuildAction >> _buildActions ;
4141 final _inputsByPackage = < String , Set <AssetId >> {};
4242 bool _buildRunning = false ;
4343 final _logger = new Logger ('Build' );
4444
4545 bool _isFirstBuild = true ;
4646
47- BuildImpl (BuildOptions options, this ._phaseGroups )
47+ BuildImpl (BuildOptions options, PhaseGroup phaseGroup )
4848 : _reader = options.reader,
4949 _writer = options.writer,
50- _packageGraph = options.packageGraph;
50+ _packageGraph = options.packageGraph,
51+ _buildActions = phaseGroup.buildActions;
5152
5253 /// Runs a build
5354 ///
@@ -313,20 +314,17 @@ class BuildImpl {
313314 // No cache file exists, run `declareOutputs` on all phases and collect all
314315 // outputs which conflict with existing assets.
315316 final conflictingOutputs = new Set <AssetId >();
316- for (var group in _phaseGroups ) {
317+ for (var phase in _buildActions ) {
317318 final groupOutputIds = < AssetId > [];
318- for (var phase in group ) {
319- var inputs = _matchingInputs (phase.inputSets );
319+ for (var action in phase ) {
320+ var inputs = _matchingInputs (action.inputSet );
320321 for (var input in inputs) {
321- for (var builder in phase.builders) {
322- var outputs = builder.declareOutputs (input);
323-
324- groupOutputIds.addAll (outputs);
325- for (var output in outputs) {
326- if (tempInputsByPackage[output.package]? .contains (output) ==
327- true ) {
328- conflictingOutputs.add (output);
329- }
322+ var outputs = action.builder.declareOutputs (input);
323+
324+ groupOutputIds.addAll (outputs);
325+ for (var output in outputs) {
326+ if (tempInputsByPackage[output.package]? .contains (output) == true ) {
327+ conflictingOutputs.add (output);
330328 }
331329 }
332330 }
@@ -375,53 +373,48 @@ class BuildImpl {
375373 }
376374 }
377375
378- /// Runs the [_phaseGroups] and returns a [Future<BuildResult>] which
379- /// completes once all [Phase ] s are done.
376+ /// Runs the [Phase] s in [_buildActions] and returns a [Future<BuildResult>]
377+ /// which completes once all [BuildAction ] s are done.
380378 Future <BuildResult > _runPhases () async {
381379 final outputs = < Asset > [];
382- int phaseGroupNum = 0 ;
383- for (var group in _phaseGroups) {
380+ for (var phase in _buildActions) {
384381 /// Collects all the ids for files which are output by this stage. This
385382 /// also includes files which didn't get regenerated because they weren't,
386383 /// dirty unlike [outputs] which only gets files which were explicitly
387384 /// generated in this build.
388- final groupOutputIds = new Set <AssetId >();
389- for (var phase in group) {
390- var inputs = _matchingInputs (phase.inputSets);
391- for (var builder in phase.builders) {
392- // TODO(jakemac): Optimize, we can run all the builders in a phase
393- // at the same time instead of sequentially.
394- await for (var output
395- in _runBuilder (builder, inputs, phaseGroupNum, groupOutputIds)) {
396- outputs.add (output);
397- }
385+ final phaseOutputIds = new Set <AssetId >();
386+ for (var action in phase) {
387+ var inputs = _matchingInputs (action.inputSet);
388+ // TODO(jakemac): Optimize, we can run all the builders in a phase
389+ // at the same time instead of sequentially.
390+ await for (var output
391+ in _runBuilder (action.builder, inputs, phaseOutputIds)) {
392+ outputs.add (output);
398393 }
399394 }
400395
401396 /// Once the group is done, add all outputs so they can be used in the next
402397 /// phase.
403- for (var outputId in groupOutputIds ) {
398+ for (var outputId in phaseOutputIds ) {
404399 _inputsByPackage.putIfAbsent (
405400 outputId.package, () => new Set <AssetId >());
406401 _inputsByPackage[outputId.package].add (outputId);
407402 }
408- phaseGroupNum++ ;
409403 }
410404 return new BuildResult (BuildStatus .Success , BuildType .Full , outputs);
411405 }
412406
413407 /// Initializes the map of all the available inputs by package.
414408 Future _initializeInputsByPackage () async {
415409 final packages = new Set <String >();
416- for (var group in _phaseGroups) {
417- for (var phase in group) {
418- for (var inputSet in phase.inputSets) {
419- packages.add (inputSet.package);
420- }
410+ for (var phase in _buildActions) {
411+ for (var action in phase) {
412+ packages.add (action.inputSet.package);
421413 }
422414 }
423415
424- var inputSets = packages.map ((package) => new InputSet (package));
416+ var inputSets = packages.map ((package) => new InputSet (
417+ package, [package == _packageGraph.root.name ? '**/*' : 'lib/**' ]));
425418 var allInputs = await _reader.listAssetIds (inputSets).toList ();
426419 _inputsByPackage.clear ();
427420 for (var input in allInputs) {
@@ -434,14 +427,12 @@ class BuildImpl {
434427 }
435428
436429 /// Gets a list of all inputs matching [inputSets] .
437- Set <AssetId > _matchingInputs (Iterable < InputSet > inputSets ) {
430+ Set <AssetId > _matchingInputs (InputSet inputSet ) {
438431 var inputs = new Set <AssetId >();
439- for (var inputSet in inputSets) {
440- assert (_inputsByPackage.containsKey (inputSet.package));
441- for (var input in _inputsByPackage[inputSet.package]) {
442- if (inputSet.globs.any ((g) => g.matches (input.path))) {
443- inputs.add (input);
444- }
432+ assert (_inputsByPackage.containsKey (inputSet.package));
433+ for (var input in _inputsByPackage[inputSet.package]) {
434+ if (inputSet.globs.any ((g) => g.matches (input.path))) {
435+ inputs.add (input);
445436 }
446437 }
447438 return inputs;
@@ -458,7 +449,7 @@ class BuildImpl {
458449
459450 /// Runs [builder] with [inputs] as inputs.
460451 Stream <Asset > _runBuilder (Builder builder, Iterable <AssetId > primaryInputs,
461- int phaseGroupNum, Set <AssetId > groupOutputs) async * {
452+ Set <AssetId > groupOutputs) async * {
462453 for (var input in primaryInputs) {
463454 var expectedOutputs = builder.declareOutputs (input);
464455
0 commit comments