OLD | NEW |
| (Empty) |
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 | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 library barback.build_result; | |
6 | |
7 import 'errors.dart'; | |
8 import 'utils.dart'; | |
9 | |
10 /// An event indicating that the cascade has finished building all assets. | |
11 /// | |
12 /// A build can end either in success or failure. If there were no errors during | |
13 /// the build, it's considered to be a success; any errors render it a failure, | |
14 /// although individual assets may still have built successfully. | |
15 class BuildResult { | |
16 // TODO(rnystrom): Revise how to track error results. Errors can come from | |
17 // both logs and exceptions. Accumulating them is likely slow and a waste of | |
18 // memory. If we do want to accumulate them, we should at least unify them | |
19 // in a single collection (probably of log entries). | |
20 /// All errors that were thrown during the build. | |
21 final Set<BarbackException> errors; | |
22 | |
23 /// `true` if the build succeeded. | |
24 bool get succeeded => errors.isEmpty; | |
25 | |
26 BuildResult(Iterable<BarbackException> errors) | |
27 : errors = flattenAggregateExceptions(errors).toSet(); | |
28 | |
29 /// Creates a build result indicating a successful build. | |
30 /// | |
31 /// This equivalent to a build result with no errors. | |
32 BuildResult.success() | |
33 : this([]); | |
34 | |
35 /// Creates a single [BuildResult] that contains all of the errors of | |
36 /// [results]. | |
37 factory BuildResult.aggregate(Iterable<BuildResult> results) { | |
38 var errors = unionAll(results.map((result) => result.errors)); | |
39 return new BuildResult(errors); | |
40 } | |
41 | |
42 String toString() { | |
43 if (succeeded) return "success"; | |
44 | |
45 return "errors:\n" + errors.map((error) { | |
46 var stackTrace = null; | |
47 if (error is TransformerException || error is AssetLoadException) { | |
48 stackTrace = error.stackTrace.terse; | |
49 } | |
50 | |
51 var msg = new StringBuffer(); | |
52 msg.write(prefixLines(error.toString())); | |
53 if (stackTrace != null) { | |
54 msg.write("\n\n"); | |
55 msg.write("Stack chain:\n"); | |
56 msg.write(prefixLines(stackTrace.toString())); | |
57 } | |
58 return msg.toString(); | |
59 }).join("\n\n"); | |
60 } | |
61 } | |
OLD | NEW |