Skip to content

Commit d27ff83

Browse files
authored
Split out _SingleBuild as Build and BuildImpl as BuildSeries. (#3927)
1 parent 3d6fd37 commit d27ff83

File tree

6 files changed

+172
-137
lines changed

6 files changed

+172
-137
lines changed

build_runner/lib/src/daemon/daemon_builder.dart

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import 'package:build_runner_core/build_runner_core.dart'
1919
// ignore: implementation_imports
2020
import 'package:build_runner_core/src/generate/build_definition.dart';
2121
// ignore: implementation_imports
22-
import 'package:build_runner_core/src/generate/build_impl.dart';
22+
import 'package:build_runner_core/src/generate/build_series.dart';
2323
import 'package:stream_transform/stream_transform.dart';
2424
import 'package:watcher/watcher.dart';
2525

@@ -36,7 +36,7 @@ import 'change_providers.dart';
3636
class BuildRunnerDaemonBuilder implements DaemonBuilder {
3737
final _buildResults = StreamController<BuildResults>();
3838

39-
final BuildImpl _builder;
39+
final BuildSeries _buildSeries;
4040
final BuildOptions _buildOptions;
4141
final StreamController<ServerLog> _outputStreamController;
4242
final ChangeProvider changeProvider;
@@ -47,7 +47,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
4747
final Stream<ServerLog> logs;
4848

4949
BuildRunnerDaemonBuilder._(
50-
this._builder,
50+
this._buildSeries,
5151
this._buildOptions,
5252
this._outputStreamController,
5353
this.changeProvider,
@@ -60,7 +60,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
6060
@override
6161
Stream<BuildResults> get builds => _buildResults.stream;
6262

63-
FinalizedReader get reader => _builder.finalizedReader;
63+
FinalizedReader get reader => _buildSeries.finalizedReader;
6464

6565
final _buildScriptUpdateCompleter = Completer<void>();
6666
Future<void> get buildScriptUpdated => _buildScriptUpdateCompleter.future;
@@ -79,7 +79,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
7979
.toList();
8080

8181
if (!_buildOptions.skipBuildScriptCheck &&
82-
_builder.buildScriptUpdates!.hasBeenUpdated(
82+
_buildSeries.buildScriptUpdates!.hasBeenUpdated(
8383
changes.map<AssetId>((change) => change.id).toSet(),
8484
)) {
8585
if (!_buildScriptUpdateCompleter.isCompleted) {
@@ -131,7 +131,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
131131

132132
try {
133133
var mergedChanges = collectChanges([changes]);
134-
var result = await _builder.run(
134+
var result = await _buildSeries.run(
135135
mergedChanges,
136136
buildDirs: buildDirs,
137137
buildFilters: buildFilters,
@@ -190,7 +190,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
190190

191191
@override
192192
Future<void> stop() async {
193-
await _builder.beforeExit();
193+
await _buildSeries.beforeExit();
194194
await _buildOptions.logListener.cancel();
195195
}
196196

@@ -279,7 +279,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
279279
logPerformanceDir: daemonOptions.logPerformanceDir,
280280
);
281281

282-
var builder = await BuildImpl.create(
282+
var buildSeries = await BuildSeries.create(
283283
buildOptions,
284284
daemonEnvironment,
285285
builders,
@@ -300,7 +300,7 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
300300
.asyncWhere(
301301
(change) => shouldProcess(
302302
change,
303-
builder.assetGraph,
303+
buildSeries.assetGraph,
304304
buildOptions,
305305
// Assume we will create an outputDir.
306306
true,
@@ -316,11 +316,11 @@ class BuildRunnerDaemonBuilder implements DaemonBuilder {
316316
? AutoChangeProviderImpl(graphEvents())
317317
: ManualChangeProviderImpl(
318318
AssetTracker(daemonEnvironment.reader, buildOptions.targetGraph),
319-
builder.assetGraph,
319+
buildSeries.assetGraph,
320320
);
321321

322322
return BuildRunnerDaemonBuilder._(
323-
builder,
323+
buildSeries,
324324
buildOptions,
325325
outputStreamController,
326326
changeProvider,

build_runner/lib/src/generate/watch_impl.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import 'package:build_runner_core/build_runner_core.dart';
1111
// ignore: implementation_imports
1212
import 'package:build_runner_core/src/asset_graph/graph.dart';
1313
// ignore: implementation_imports
14-
import 'package:build_runner_core/src/generate/build_impl.dart';
14+
import 'package:build_runner_core/src/generate/build_series.dart';
1515
import 'package:crypto/crypto.dart';
1616
import 'package:logging/logging.dart';
1717
import 'package:stream_transform/stream_transform.dart';
@@ -159,9 +159,9 @@ WatchImpl _runWatch(
159159
);
160160

161161
class WatchImpl implements BuildState {
162-
BuildImpl? _build;
162+
BuildSeries? _buildSeries;
163163

164-
AssetGraph? get assetGraph => _build?.assetGraph;
164+
AssetGraph? get assetGraph => _buildSeries?.assetGraph;
165165

166166
final String? _configKey;
167167

@@ -250,7 +250,7 @@ class WatchImpl implements BuildState {
250250
var controller = StreamController<BuildResult>();
251251

252252
Future<BuildResult> doBuild(List<List<AssetChange>> changes) async {
253-
var build = _build!;
253+
var build = _buildSeries!;
254254
_logger
255255
..info('${'-' * 72}\n')
256256
..info('Starting Build\n');
@@ -362,7 +362,7 @@ class WatchImpl implements BuildState {
362362
})
363363
.onDone(() async {
364364
await currentBuild;
365-
await _build?.beforeExit();
365+
await _buildSeries?.beforeExit();
366366
if (!controller.isClosed) await controller.close();
367367
_logger.info('Builds finished. Safe to exit\n');
368368
});
@@ -387,10 +387,10 @@ class WatchImpl implements BuildState {
387387
}
388388

389389
BuildResult firstBuild;
390-
BuildImpl? build;
390+
BuildSeries? build;
391391
try {
392392
build =
393-
_build = await BuildImpl.create(
393+
_buildSeries = await BuildSeries.create(
394394
options,
395395
watcherEnvironment,
396396
builders,

build_runner_core/lib/src/generate/build_impl.dart renamed to build_runner_core/lib/src/generate/build.dart

Lines changed: 18 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,23 @@ import 'package:logging/logging.dart';
1616
import 'package:path/path.dart' as p;
1717
import 'package:watcher/watcher.dart';
1818

19-
import '../asset/finalized_reader.dart';
2019
import '../asset/writer.dart';
2120
import '../asset_graph/graph.dart';
2221
import '../asset_graph/node.dart';
2322
import '../asset_graph/optional_output_tracker.dart';
24-
import '../changes/build_script_updates.dart';
2523
import '../environment/build_environment.dart';
2624
import '../logging/build_for_input_logger.dart';
2725
import '../logging/failure_reporter.dart';
2826
import '../logging/human_readable_duration.dart';
2927
import '../logging/logging.dart';
30-
import '../package_graph/apply_builders.dart';
3128
import '../package_graph/package_graph.dart';
3229
import '../package_graph/target_graph.dart';
3330
import '../performance_tracking/performance_tracking_resolvers.dart';
3431
import '../util/build_dirs.dart';
3532
import '../util/constants.dart';
36-
import 'build_definition.dart';
3733
import 'build_directory.dart';
3834
import 'build_result.dart';
35+
import 'build_series.dart';
3936
import 'finalized_assets_view.dart';
4037
import 'heartbeat.dart';
4138
import 'input_tracker.dart';
@@ -46,103 +43,8 @@ import 'single_step_reader_writer.dart';
4643

4744
final _logger = Logger('Build');
4845

49-
Set<String> _buildPaths(Set<BuildDirectory> buildDirs) =>
50-
// The empty string means build everything.
51-
buildDirs.any((b) => b.directory == '')
52-
? <String>{}
53-
: buildDirs.map((b) => b.directory).toSet();
54-
55-
class BuildImpl {
56-
final BuildEnvironment _environment;
57-
final AssetGraph assetGraph;
58-
final BuildScriptUpdates? buildScriptUpdates;
59-
final BuildOptions _options;
60-
final List<BuildPhase> _buildPhases;
61-
62-
final FinalizedReader finalizedReader;
63-
final AssetReaderWriter _readerWriter;
64-
final RunnerAssetWriter _deleteWriter;
65-
final ResourceManager _resourceManager = ResourceManager();
66-
67-
Future<void> beforeExit() => _resourceManager.beforeExit();
68-
69-
BuildImpl._(
70-
this._environment,
71-
this.assetGraph,
72-
this.buildScriptUpdates,
73-
this._options,
74-
this._buildPhases,
75-
this.finalizedReader,
76-
) : _deleteWriter = _environment.writer.copyWith(
77-
generatedAssetHider: assetGraph,
78-
),
79-
_readerWriter = _environment.reader.copyWith(
80-
generatedAssetHider: assetGraph,
81-
cache:
82-
_options.enableLowResourcesMode
83-
? const PassthroughFilesystemCache()
84-
: InMemoryFilesystemCache(),
85-
);
86-
87-
Future<BuildResult> run(
88-
Map<AssetId, ChangeType> updates, {
89-
Set<BuildDirectory> buildDirs = const <BuildDirectory>{},
90-
Set<BuildFilter> buildFilters = const {},
91-
}) {
92-
finalizedReader.reset(_buildPaths(buildDirs), buildFilters);
93-
return _SingleBuild(this, buildDirs, buildFilters).run(updates)
94-
..whenComplete(_options.resolvers.reset);
95-
}
96-
97-
static Future<BuildImpl> create(
98-
BuildOptions options,
99-
BuildEnvironment environment,
100-
List<BuilderApplication> builders,
101-
Map<String, Map<String, dynamic>> builderConfigOverrides, {
102-
bool isReleaseBuild = false,
103-
}) async {
104-
// Don't allow any changes to the generated asset directory after this
105-
// point.
106-
lockGeneratedOutputDirectory();
107-
108-
var buildPhases = await createBuildPhases(
109-
options.targetGraph,
110-
builders,
111-
builderConfigOverrides,
112-
isReleaseBuild,
113-
);
114-
if (buildPhases.isEmpty) {
115-
_logger.severe('Nothing can be built, yet a build was requested.');
116-
}
117-
var buildDefinition = await BuildDefinition.prepareWorkspace(
118-
environment,
119-
options,
120-
buildPhases,
121-
);
122-
var finalizedReader = FinalizedReader(
123-
environment.reader.copyWith(
124-
generatedAssetHider: buildDefinition.assetGraph,
125-
),
126-
buildDefinition.assetGraph,
127-
options.targetGraph,
128-
buildPhases,
129-
options.packageGraph.root.name,
130-
);
131-
var build = BuildImpl._(
132-
environment,
133-
buildDefinition.assetGraph,
134-
buildDefinition.buildScriptUpdates,
135-
options,
136-
buildPhases,
137-
finalizedReader,
138-
);
139-
return build;
140-
}
141-
}
142-
143-
/// Performs a single build and manages state that only lives for a single
144-
/// build.
145-
class _SingleBuild {
46+
/// A single build.
47+
class Build {
14648
final AssetGraph _assetGraph;
14749
final Set<BuildFilter> _buildFilters;
14850
final List<BuildPhase> _buildPhases;
@@ -167,26 +69,26 @@ class _SingleBuild {
16769

16870
late final HungActionsHeartbeat hungActionsHeartbeat;
16971

170-
_SingleBuild(
171-
BuildImpl buildImpl,
72+
Build(
73+
BuildSeries buildSeries,
17274
Set<BuildDirectory> buildDirs,
17375
Set<BuildFilter> buildFilters,
174-
) : _assetGraph = buildImpl.assetGraph,
76+
) : _assetGraph = buildSeries.assetGraph,
17577
_buildFilters = buildFilters,
176-
_buildPhases = buildImpl._buildPhases,
177-
_environment = buildImpl._environment,
178-
_packageGraph = buildImpl._options.packageGraph,
179-
_targetGraph = buildImpl._options.targetGraph,
78+
_buildPhases = buildSeries.buildPhases,
79+
_environment = buildSeries.environment,
80+
_packageGraph = buildSeries.options.packageGraph,
81+
_targetGraph = buildSeries.options.targetGraph,
18082
_performanceTracker =
181-
buildImpl._options.trackPerformance
83+
buildSeries.options.trackPerformance
18284
? BuildPerformanceTracker()
18385
: BuildPerformanceTracker.noOp(),
184-
_readerWriter = buildImpl._readerWriter,
185-
_deleteWriter = buildImpl._deleteWriter,
186-
_resolvers = buildImpl._options.resolvers,
187-
_resourceManager = buildImpl._resourceManager,
86+
_readerWriter = buildSeries.readerWriter,
87+
_deleteWriter = buildSeries.deleteWriter,
88+
_resolvers = buildSeries.options.resolvers,
89+
_resourceManager = buildSeries.resourceManager,
18890
_buildDirs = buildDirs,
189-
_logPerformanceDir = buildImpl._options.logPerformanceDir {
91+
_logPerformanceDir = buildSeries.options.logPerformanceDir {
19092
hungActionsHeartbeat = HungActionsHeartbeat(() {
19193
final message = StringBuffer();
19294
const actionsToLogMax = 5;
@@ -211,7 +113,7 @@ class _SingleBuild {
211113
var optionalOutputTracker = OptionalOutputTracker(
212114
_assetGraph,
213115
_targetGraph,
214-
_buildPaths(_buildDirs),
116+
BuildDirectory.buildPaths(_buildDirs),
215117
_buildFilters,
216118
_buildPhases,
217119
);
@@ -389,7 +291,7 @@ class _SingleBuild {
389291
.toList(growable: false)) {
390292
if (!shouldBuildForDirs(
391293
node.id,
392-
buildDirs: _buildPaths(_buildDirs),
294+
buildDirs: BuildDirectory.buildPaths(_buildDirs),
393295
buildFilters: _buildFilters,
394296
phase: phase,
395297
targetGraph: _targetGraph,

build_runner_core/lib/src/generate/build_directory.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ class BuildDirectory {
1515

1616
@override
1717
int get hashCode => Object.hash(directory, outputLocation);
18+
19+
static Set<String> buildPaths(Set<BuildDirectory> buildDirs) =>
20+
// The empty string means build everything.
21+
buildDirs.any((b) => b.directory == '')
22+
? <String>{}
23+
: buildDirs.map((b) => b.directory).toSet();
1824
}
1925

2026
class OutputLocation {

build_runner_core/lib/src/generate/build_runner.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import 'package:watcher/watcher.dart';
1010
import '../environment/build_environment.dart';
1111
import '../package_graph/apply_builders.dart';
1212
import 'build_directory.dart';
13-
import 'build_impl.dart';
1413
import 'build_result.dart';
14+
import 'build_series.dart';
1515
import 'options.dart';
1616

1717
class BuildRunner {
18-
final BuildImpl _build;
18+
final BuildSeries _build;
1919
BuildRunner._(this._build);
2020

2121
Future<void> beforeExit() => _build.beforeExit();
@@ -34,7 +34,7 @@ class BuildRunner {
3434
bool isReleaseBuild = false,
3535
}) async {
3636
return BuildRunner._(
37-
await BuildImpl.create(
37+
await BuildSeries.create(
3838
options,
3939
environment,
4040
builders,

0 commit comments

Comments
 (0)