Chromium Code Reviews| Index: pkg/barback/lib/src/package_graph.dart |
| diff --git a/pkg/barback/lib/src/package_graph.dart b/pkg/barback/lib/src/package_graph.dart |
| index 2cd5b46b370e2eac2d4f8082c8859efcdf0d105e..ec358e64deb15d46c765ca633abf0b7b5c96c6db 100644 |
| --- a/pkg/barback/lib/src/package_graph.dart |
| +++ b/pkg/barback/lib/src/package_graph.dart |
| @@ -10,6 +10,7 @@ import 'asset_cascade.dart'; |
| import 'asset_id.dart'; |
| import 'asset_node.dart'; |
| import 'asset_set.dart'; |
| +import 'barback_logger.dart'; |
| import 'build_result.dart'; |
| import 'errors.dart'; |
| import 'package_provider.dart'; |
| @@ -24,6 +25,10 @@ class PackageGraph { |
| /// The provider that exposes asset and package information. |
| final PackageProvider provider; |
| + /// The logger used to report transformer log entries. If this is null, then |
|
nweiz
2013/10/16 19:41:27
paragraph break
Bob Nystrom
2013/10/28 23:45:56
Done.
|
| + /// [_defaultLogger] will be used instead. |
|
nweiz
2013/10/16 19:41:27
_defaultLogger isn't defined anywhere
Bob Nystrom
2013/10/28 23:45:56
Done.
|
| + final BarbackLogger _logger; |
| + |
| /// The [AssetCascade] for each package. |
| final _cascades = <String, AssetCascade>{}; |
| @@ -62,7 +67,8 @@ class PackageGraph { |
| /// Creates a new [PackageGraph] that will transform assets in all packages |
| /// made available by [provider]. |
| - PackageGraph(this.provider) { |
| + PackageGraph(this.provider, {BarbackLogger logger}) |
| + : _logger = logger != null ? logger : new BarbackLogger() { |
| for (var package in provider.packages) { |
| var cascade = new AssetCascade(this, package); |
| // The initial result for each cascade is "success" since the cascade |
| @@ -73,16 +79,23 @@ class PackageGraph { |
| _cascadeResults[package] = null; |
| }); |
| + cascade.onLog.listen(_logger.logEntry); |
| + |
| cascade.results.listen((result) { |
| _cascadeResults[cascade.package] = result; |
| // If any cascade hasn't yet finished, the overall build isn't finished |
| // either. |
| if (_cascadeResults.values.any((result) => result == null)) return; |
| + var errors = unionAll( |
| + _cascadeResults.values.map((result) => result.errors)); |
| + |
| + var numLogErrors = _cascadeResults.values.fold(0, |
| + (numErrors, result) => result.numErrors - result.errors.length); |
| + |
| // Include all build errors for all cascades. If no cascades have |
| // errors, the result will automatically be considered a success. |
| - _resultsController.add(new BuildResult(unionAll( |
| - _cascadeResults.values.map((result) => result.errors)))); |
| + _resultsController.add(new BuildResult(errors, numLogErrors)); |
| }, onError: (error) { |
| _lastUnexpectedError = error; |
| _resultsController.addError(error); |