Skip to content

Commit 998d456

Browse files
committed
Remove MultiAssetReader in favour of preloading source into memory.
1 parent 840bd24 commit 998d456

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

build_resolvers/test/resolver_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,8 @@ void runTests(ResolversFactory resolversFactory) {
361361
test('defaults to the current isolate package config', () async {
362362
await resolveSources({
363363
'a|web/main.dart': 'main() {}',
364+
}, nonInputsToReadFromFilesystem: {
365+
AssetId.parse('build_resolvers|lib/build_resolvers.dart')
364366
}, (resolver) async {
365367
var buildResolversId =
366368
AssetId('build_resolvers', 'lib/build_resolvers.dart');

build_test/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
- Breaking change: `testBuilder` no longer accepts a `reader` and a `writer`.
77
Instead it returns a `TestBuilderResult` with the `InMemoryAssetReaderWriter`
88
that was used.
9+
- Breaking change: `resolveSources` no longer automatically reads non-input
10+
files from the filesystem; specify explicitly which non-input files the
11+
test should read in `nonInputsToReadFromFilesystem`.
12+
- Breaking change: remove `MultiAssetReader`. Load the source into one
13+
in-memory reader instead of providing multiple readers.
914
- Support checks on reader state after a build action in `resolveSources`.
1015
- Start using `package:build/src/internal.dart`.
1116

build_test/lib/src/resolve_source.dart

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import 'package:build_resolvers/build_resolvers.dart';
1111
import 'package:package_config/package_config.dart';
1212

1313
import 'in_memory_reader.dart';
14-
import 'multi_asset_reader.dart';
1514
import 'package_reader.dart';
1615

1716
/// Marker constant that may be used in combination with [resolveSources].
@@ -120,6 +119,7 @@ Future<T> resolveSources<T>(
120119
Map<String, String> inputs,
121120
FutureOr<T> Function(Resolver resolver) action, {
122121
PackageConfig? packageConfig,
122+
Set<AssetId>? nonInputsToReadFromFilesystem,
123123
String? resolverFor,
124124
String? rootPackage,
125125
FutureOr<void> Function(InMemoryAssetReader)? assetReaderChecks,
@@ -134,6 +134,7 @@ Future<T> resolveSources<T>(
134134
rootPackage ?? AssetId.parse(inputs.keys.first).package,
135135
action,
136136
packageConfig: packageConfig,
137+
nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
137138
resolverFor: AssetId.parse(resolverFor ?? inputs.keys.first),
138139
assetReaderChecks: assetReaderChecks,
139140
tearDown: tearDown,
@@ -146,6 +147,7 @@ Future<T> resolveAsset<T>(
146147
AssetId inputId,
147148
FutureOr<T> Function(Resolver resolver) action, {
148149
PackageConfig? packageConfig,
150+
Set<AssetId>? nonInputsToReadFromFilesystem,
149151
Future<void>? tearDown,
150152
Resolvers? resolvers,
151153
}) {
@@ -156,6 +158,7 @@ Future<T> resolveAsset<T>(
156158
inputId.package,
157159
action,
158160
packageConfig: packageConfig,
161+
nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
159162
resolverFor: inputId,
160163
tearDown: tearDown,
161164
resolvers: resolvers,
@@ -172,19 +175,25 @@ Future<T> _resolveAssets<T>(
172175
String rootPackage,
173176
FutureOr<T> Function(Resolver resolver) action, {
174177
PackageConfig? packageConfig,
178+
Set<AssetId>? nonInputsToReadFromFilesystem,
175179
AssetId? resolverFor,
176180
FutureOr<void> Function(InMemoryAssetReader)? assetReaderChecks,
177181
Future<void>? tearDown,
178182
Resolvers? resolvers,
179183
}) async {
180184
final resolvedConfig = packageConfig ??
181185
await loadPackageConfigUri((await Isolate.packageConfig)!);
182-
final assetReader = PackageAssetReader(resolvedConfig, rootPackage);
183186
final resolveBuilder = _ResolveSourceBuilder(
184187
action,
185188
resolverFor,
186189
tearDown,
187190
);
191+
192+
// Prepare the in-memory filesystem the build will run on.
193+
//
194+
// First, add directly-passed [inputs], reading from the filesysem if the
195+
// string passed is [useAssetReader].
196+
final assetReader = PackageAssetReader(resolvedConfig, rootPackage);
188197
final inputAssets = <AssetId, String>{};
189198
await Future.wait(inputs.keys.map((String rawAssetId) async {
190199
final assetId = AssetId.parse(rawAssetId);
@@ -194,11 +203,18 @@ Future<T> _resolveAssets<T>(
194203
}
195204
inputAssets[assetId] = assetValue;
196205
}));
197-
final inMemory = InMemoryAssetReaderWriter(
206+
final readerWriter = InMemoryAssetReaderWriter(
198207
sourceAssets: inputAssets,
199208
rootPackage: rootPackage,
200209
);
201210

211+
// Then, read any additionally requested files from the filesystem. These are
212+
if (nonInputsToReadFromFilesystem != null) {
213+
for (final id in nonInputsToReadFromFilesystem) {
214+
await readerWriter.writeAsBytes(id, await assetReader.readAsBytes(id));
215+
}
216+
}
217+
202218
// Use the default resolver if no experiments are enabled. This is much
203219
// faster.
204220
resolvers ??= packageConfig == null && enabledExperiments.isEmpty
@@ -216,13 +232,13 @@ Future<T> _resolveAssets<T>(
216232
unawaited(runBuilder(
217233
resolveBuilder,
218234
inputAssets.keys,
219-
MultiAssetReader([inMemory, assetReader]),
220-
inMemory,
235+
readerWriter,
236+
readerWriter,
221237
resolvers,
222238
).catchError((_) {}));
223239
final result = await resolveBuilder.onDone.future;
224240
if (assetReaderChecks != null) {
225-
await assetReaderChecks(inMemory);
241+
await assetReaderChecks(readerWriter);
226242
}
227243
return result;
228244
}

0 commit comments

Comments
 (0)