Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(527)

Side by Side Diff: pkg/barback/lib/src/package_graph.dart

Issue 26572010: Improve barback/pub logging. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add missing file. Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library barback.package_graph; 5 library barback.package_graph;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 8
9 import 'asset_cascade.dart'; 9 import 'asset_cascade.dart';
10 import 'asset_id.dart'; 10 import 'asset_id.dart';
11 import 'asset_node.dart'; 11 import 'asset_node.dart';
12 import 'asset_set.dart'; 12 import 'asset_set.dart';
13 import 'barback_logger.dart';
13 import 'build_result.dart'; 14 import 'build_result.dart';
14 import 'errors.dart'; 15 import 'errors.dart';
15 import 'package_provider.dart'; 16 import 'package_provider.dart';
16 import 'transformer.dart'; 17 import 'transformer.dart';
17 import 'utils.dart'; 18 import 'utils.dart';
18 19
19 /// The collection of [AssetCascade]s for an entire application. 20 /// The collection of [AssetCascade]s for an entire application.
20 /// 21 ///
21 /// This tracks each package's [AssetCascade] and routes asset requests between 22 /// This tracks each package's [AssetCascade] and routes asset requests between
22 /// them. 23 /// them.
23 class PackageGraph { 24 class PackageGraph {
24 /// The provider that exposes asset and package information. 25 /// The provider that exposes asset and package information.
25 final PackageProvider provider; 26 final PackageProvider provider;
26 27
28 /// 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.
29 /// [_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.
30 final BarbackLogger _logger;
31
27 /// The [AssetCascade] for each package. 32 /// The [AssetCascade] for each package.
28 final _cascades = <String, AssetCascade>{}; 33 final _cascades = <String, AssetCascade>{};
29 34
30 /// The current [BuildResult] for each package's [AssetCascade]. 35 /// The current [BuildResult] for each package's [AssetCascade].
31 /// 36 ///
32 /// The result for a given package will be `null` if that [AssetCascade] is 37 /// The result for a given package will be `null` if that [AssetCascade] is
33 /// actively building. 38 /// actively building.
34 final _cascadeResults = <String, BuildResult>{}; 39 final _cascadeResults = <String, BuildResult>{};
35 40
36 /// A stream that emits a [BuildResult] each time the build is completed, 41 /// A stream that emits a [BuildResult] each time the build is completed,
(...skipping 18 matching lines...) Expand all
55 Stream<BarbackException> _errors; 60 Stream<BarbackException> _errors;
56 61
57 /// The most recent error emitted from a cascade's result stream. 62 /// The most recent error emitted from a cascade's result stream.
58 /// 63 ///
59 /// This is used to pipe an unexpected error from a build to the resulting 64 /// This is used to pipe an unexpected error from a build to the resulting
60 /// [Future] returned by [getAllAssets]. 65 /// [Future] returned by [getAllAssets].
61 var _lastUnexpectedError; 66 var _lastUnexpectedError;
62 67
63 /// Creates a new [PackageGraph] that will transform assets in all packages 68 /// Creates a new [PackageGraph] that will transform assets in all packages
64 /// made available by [provider]. 69 /// made available by [provider].
65 PackageGraph(this.provider) { 70 PackageGraph(this.provider, {BarbackLogger logger})
71 : _logger = logger != null ? logger : new BarbackLogger() {
66 for (var package in provider.packages) { 72 for (var package in provider.packages) {
67 var cascade = new AssetCascade(this, package); 73 var cascade = new AssetCascade(this, package);
68 // The initial result for each cascade is "success" since the cascade 74 // The initial result for each cascade is "success" since the cascade
69 // doesn't start building until some source in that graph is updated. 75 // doesn't start building until some source in that graph is updated.
70 _cascadeResults[package] = new BuildResult.success(); 76 _cascadeResults[package] = new BuildResult.success();
71 _cascades[package] = cascade; 77 _cascades[package] = cascade;
72 cascade.onDirty.listen((_) { 78 cascade.onDirty.listen((_) {
73 _cascadeResults[package] = null; 79 _cascadeResults[package] = null;
74 }); 80 });
75 81
82 cascade.onLog.listen(_logger.logEntry);
83
76 cascade.results.listen((result) { 84 cascade.results.listen((result) {
77 _cascadeResults[cascade.package] = result; 85 _cascadeResults[cascade.package] = result;
78 // If any cascade hasn't yet finished, the overall build isn't finished 86 // If any cascade hasn't yet finished, the overall build isn't finished
79 // either. 87 // either.
80 if (_cascadeResults.values.any((result) => result == null)) return; 88 if (_cascadeResults.values.any((result) => result == null)) return;
81 89
90 var errors = unionAll(
91 _cascadeResults.values.map((result) => result.errors));
92
93 var numLogErrors = _cascadeResults.values.fold(0,
94 (numErrors, result) => result.numErrors - result.errors.length);
95
82 // Include all build errors for all cascades. If no cascades have 96 // Include all build errors for all cascades. If no cascades have
83 // errors, the result will automatically be considered a success. 97 // errors, the result will automatically be considered a success.
84 _resultsController.add(new BuildResult(unionAll( 98 _resultsController.add(new BuildResult(errors, numLogErrors));
85 _cascadeResults.values.map((result) => result.errors))));
86 }, onError: (error) { 99 }, onError: (error) {
87 _lastUnexpectedError = error; 100 _lastUnexpectedError = error;
88 _resultsController.addError(error); 101 _resultsController.addError(error);
89 }); 102 });
90 } 103 }
91 104
92 _errors = mergeStreams(_cascades.values.map((cascade) => cascade.errors), 105 _errors = mergeStreams(_cascades.values.map((cascade) => cascade.errors),
93 broadcast: true); 106 broadcast: true);
94 } 107 }
95 108
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 if (cascade == null) throw new ArgumentError("Unknown package $package."); 171 if (cascade == null) throw new ArgumentError("Unknown package $package.");
159 cascade.removeSources(ids); 172 cascade.removeSources(ids);
160 }); 173 });
161 } 174 }
162 175
163 void updateTransformers(String package, 176 void updateTransformers(String package,
164 Iterable<Iterable<Transformer>> transformers) { 177 Iterable<Iterable<Transformer>> transformers) {
165 _cascades[package].updateTransformers(transformers); 178 _cascades[package].updateTransformers(transformers);
166 } 179 }
167 } 180 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698