Skip to content

Commit 528c244

Browse files
committed
Store errrors in the asset graph instead of separate files.
1 parent effc827 commit 528c244

File tree

7 files changed

+72
-175
lines changed

7 files changed

+72
-175
lines changed

build_runner_core/lib/src/asset_graph/graph_loader.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import '../asset_graph/exceptions.dart';
1616
import '../asset_graph/graph.dart';
1717
import '../generate/build_phases.dart';
1818
import '../generate/exceptions.dart';
19-
import '../logging/failure_reporter.dart';
2019
import '../logging/logging.dart';
2120
import '../package_graph/package_graph.dart';
2221
import '../util/constants.dart';
@@ -66,7 +65,6 @@ class AssetGraphLoader {
6665
);
6766
await Future.wait([
6867
writer.deleteDirectory(_generatedOutputDirectoryId),
69-
FailureReporter.cleanErrorCache(),
7068
]);
7169
return null;
7270
}
@@ -111,7 +109,6 @@ class AssetGraphLoader {
111109
writer.delete(assetGraphId),
112110
cachedGraph.deleteOutputs(packageGraph, writer),
113111
writer.deleteDirectory(_generatedOutputDirectoryId),
114-
FailureReporter.cleanErrorCache(),
115112
]);
116113
if (_runningFromSnapshot) {
117114
throw const BuildScriptChangedException();
@@ -126,7 +123,6 @@ class AssetGraphLoader {
126123
writer.delete(assetGraphId),
127124
cachedGraph.deleteOutputs(packageGraph, writer),
128125
writer.deleteDirectory(_generatedOutputDirectoryId),
129-
FailureReporter.cleanErrorCache(),
130126
]);
131127
if (_runningFromSnapshot) {
132128
throw const BuildScriptChangedException();

build_runner_core/lib/src/asset_graph/node.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,8 @@ abstract class GeneratedNodeState
286286
/// [AssetNode.wasOutput].
287287
bool? get result;
288288

289+
BuiltList<String> get errors;
290+
289291
factory GeneratedNodeState(void Function(GeneratedNodeStateBuilder) updates) =
290292
_$GeneratedNodeState;
291293

build_runner_core/lib/src/asset_graph/node.g.dart

Lines changed: 41 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build_runner_core/lib/src/asset_graph/serializers.g.dart

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build_runner_core/lib/src/generate/build.dart

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import '../asset_graph/post_process_build_step_id.dart';
2525
import '../changes/asset_updates.dart';
2626
import '../environment/build_environment.dart';
2727
import '../logging/build_for_input_logger.dart';
28-
import '../logging/failure_reporter.dart';
2928
import '../logging/human_readable_duration.dart';
3029
import '../logging/log_renderer.dart';
3130
import '../logging/logging.dart';
@@ -72,7 +71,6 @@ class Build {
7271
final AssetGraph assetGraph;
7372
final lazyPhases = <String, Future<Iterable<AssetId>>>{};
7473
final lazyGlobs = <AssetId, Future<void>>{};
75-
final failureReporter = FailureReporter();
7674
int actionsCompletedCount = 0;
7775
int actionsStartedCount = 0;
7876
final pendingActions = SplayTreeMap<int, Set<String>>();
@@ -175,7 +173,11 @@ class Build {
175173
.where((node) => node.type == NodeType.generated)
176174
.where((node) => node.generatedNodeState!.result == false);
177175
if (failures.isNotEmpty) {
178-
await failureReporter.reportErrors(failures);
176+
for (final failure in failures) {
177+
for (final error in failure.generatedNodeState!.errors) {
178+
_logger.severe(error);
179+
}
180+
}
179181
result = BuildResult(
180182
BuildStatus.failure,
181183
result.outputs,
@@ -494,7 +496,6 @@ class Build {
494496
}
495497

496498
await _cleanUpStaleOutputs(builderOutputs);
497-
await FailureReporter.clean(phaseNumber, primaryInput);
498499

499500
// Clear input tracking accumulated during `_buildShouldRun`.
500501
readerWriter.inputTracker.clear();
@@ -630,7 +631,6 @@ class Build {
630631
readerWriter.inputTracker.clear();
631632

632633
// Clean out the impacts of the previous run.
633-
await FailureReporter.clean(phaseNumber, input);
634634
final existingOutputs = assetGraph.postProcessBuildStepOutputs(
635635
postProcessBuildStepId,
636636
);
@@ -738,10 +738,10 @@ class Build {
738738
// https://github.com/dart-lang/build/issues/3875.
739739
nodeBuilder.digest = null;
740740
nodeBuilder.generatedNodeState.result = false;
741+
nodeBuilder.generatedNodeState.errors.clear();
741742
});
742743
processedOutputs.add(output);
743744
}
744-
await failureReporter.markSkipped(outputs.map((id) => assetGraph.get(id)!));
745745
}
746746

747747
/// Checks and returns whether any [outputs] need to be updated in
@@ -1191,15 +1191,15 @@ class Build {
11911191
/// - Setting `digest` based on what was written.
11921192
/// - Setting `result` based on action success.
11931193
/// - Setting `inputs` based on `inputTracker` and `unusedAssets`.
1194-
/// - Storing the error message with the [failureReporter].
1194+
/// - Setting `errors`.
11951195
/// - Updating `newPrimaryInputs` and `changedOutputs` as needed.
11961196
Future<void> _setOutputsState(
11971197
AssetId input,
11981198
Iterable<AssetId> outputs,
11991199
SingleStepReaderWriter readerWriter,
12001200
InputTracker inputTracker,
12011201
String actionDescription,
1202-
Iterable<ErrorReport> errors, {
1202+
Iterable<String> errors, {
12031203
Set<AssetId>? unusedAssets,
12041204
}) async {
12051205
if (outputs.isEmpty) return;
@@ -1232,21 +1232,11 @@ class Build {
12321232
nodeBuilder.generatedNodeState
12331233
..inputs.replace(usedInputs)
12341234
..resolverEntrypoints.replace(inputTracker.resolverEntrypoints)
1235-
..result = result;
1235+
..result = result
1236+
..errors.replace(errors);
12361237
nodeBuilder.digest = digest;
12371238
});
12381239

1239-
if (!result) {
1240-
// Mark this output as failed. Transitive outputs will be marked as
1241-
// failed when they are processed and notice their primary inputs
1242-
// have failed.
1243-
await failureReporter.markReported(
1244-
actionDescription,
1245-
outputNode,
1246-
errors,
1247-
);
1248-
}
1249-
12501240
processedOutputs.add(output);
12511241
}
12521242
}

build_runner_core/lib/src/logging/build_for_input_logger.dart

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@ import 'dart:async';
66

77
import 'package:logging/logging.dart';
88

9-
import 'failure_reporter.dart';
10-
119
/// A delegating [Logger] that records if any logs of level >= [Level.SEVERE]
1210
/// were seen.
1311
class BuildForInputLogger implements Logger {
1412
final Logger _delegate;
1513

16-
final errorsSeen = <ErrorReport>[];
14+
final errorsSeen = <String>[];
1715

1816
BuildForInputLogger(this._delegate);
1917

@@ -64,7 +62,7 @@ class BuildForInputLogger implements Logger {
6462
Zone? zone,
6563
]) {
6664
if (logLevel >= Level.SEVERE) {
67-
errorsSeen.add(ErrorReport('$message', '${error ?? ''}', stackTrace));
65+
errorsSeen.add(_renderError(message, error, stackTrace));
6866
}
6967
_delegate.log(logLevel, message, error, stackTrace, zone);
7068
}
@@ -80,13 +78,13 @@ class BuildForInputLogger implements Logger {
8078

8179
@override
8280
void severe(Object? message, [Object? error, StackTrace? stackTrace]) {
83-
errorsSeen.add(ErrorReport('$message', '${error ?? ''}', stackTrace));
81+
errorsSeen.add(_renderError(message, error, stackTrace));
8482
_delegate.severe(message, error, stackTrace);
8583
}
8684

8785
@override
8886
void shout(Object? message, [Object? error, StackTrace? stackTrace]) {
89-
errorsSeen.add(ErrorReport('$message', '${error ?? ''}', stackTrace));
87+
errorsSeen.add(_renderError(message, error, stackTrace));
9088
_delegate.shout(message, error, stackTrace);
9189
}
9290

@@ -96,4 +94,15 @@ class BuildForInputLogger implements Logger {
9694

9795
@override
9896
Stream<Level?> get onLevelChanged => _delegate.onLevelChanged;
97+
98+
String _renderError(
99+
Object? message, [
100+
Object? error,
101+
StackTrace? stackTrace,
102+
]) {
103+
var result = message?.toString() ?? '';
104+
if (error != null) result += '\n$error';
105+
if (stackTrace != null) result += '\n$stackTrace';
106+
return result;
107+
}
99108
}

0 commit comments

Comments
 (0)