Skip to content

Remove multi reader #3857

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build_resolvers/test/resolver_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ void runTests(ResolversFactory resolversFactory) {
test('defaults to the current isolate package config', () async {
await resolveSources({
'a|web/main.dart': 'main() {}',
}, nonInputsToReadFromFilesystem: {
AssetId('build_resolvers', 'lib/build_resolvers.dart')
}, (resolver) async {
var buildResolversId =
AssetId('build_resolvers', 'lib/build_resolvers.dart');
Expand Down
5 changes: 5 additions & 0 deletions build_test/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
- Breaking change: `testBuilder` no longer accepts a `reader` and a `writer`.
Instead it returns a `TestBuilderResult` with the `InMemoryAssetReaderWriter`
that was used.
- Breaking change: `resolveSources` no longer automatically reads non-input
files from the filesystem; specify explicitly which non-input files the
test should read in `nonInputsToReadFromFilesystem`.
- Breaking change: remove `MultiAssetReader`. Load the source into one
in-memory reader instead of providing multiple readers.
- Support checks on reader state after a build action in `resolveSources`.
- Start using `package:build/src/internal.dart`.

Expand Down
1 change: 0 additions & 1 deletion build_test/lib/build_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ export 'src/globbing_builder.dart';
export 'src/in_memory_reader.dart';
export 'src/in_memory_writer.dart';
export 'src/matchers.dart';
export 'src/multi_asset_reader.dart' show MultiAssetReader;
export 'src/package_reader.dart' show PackageAssetReader;
export 'src/record_logs.dart';
export 'src/resolve_source.dart'
Expand Down
75 changes: 0 additions & 75 deletions build_test/lib/src/multi_asset_reader.dart

This file was deleted.

31 changes: 25 additions & 6 deletions build_test/lib/src/resolve_source.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import 'package:build_resolvers/build_resolvers.dart';
import 'package:package_config/package_config.dart';

import 'in_memory_reader.dart';
import 'multi_asset_reader.dart';
import 'package_reader.dart';

/// Marker constant that may be used in combination with [resolveSources].
Expand All @@ -27,6 +26,7 @@ Future<T> resolveSource<T>(
FutureOr<T> Function(Resolver resolver) action, {
AssetId? inputId,
PackageConfig? packageConfig,
Set<AssetId>? nonInputsToReadFromFilesystem,
Future<void>? tearDown,
Resolvers? resolvers,
}) {
Expand All @@ -38,6 +38,7 @@ Future<T> resolveSource<T>(
inputId.package,
action,
packageConfig: packageConfig,
nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
resolverFor: inputId,
tearDown: tearDown,
resolvers: resolvers,
Expand Down Expand Up @@ -120,6 +121,7 @@ Future<T> resolveSources<T>(
Map<String, String> inputs,
FutureOr<T> Function(Resolver resolver) action, {
PackageConfig? packageConfig,
Set<AssetId>? nonInputsToReadFromFilesystem,
String? resolverFor,
String? rootPackage,
FutureOr<void> Function(InMemoryAssetReader)? assetReaderChecks,
Expand All @@ -134,6 +136,7 @@ Future<T> resolveSources<T>(
rootPackage ?? AssetId.parse(inputs.keys.first).package,
action,
packageConfig: packageConfig,
nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
resolverFor: AssetId.parse(resolverFor ?? inputs.keys.first),
assetReaderChecks: assetReaderChecks,
tearDown: tearDown,
Expand All @@ -146,6 +149,7 @@ Future<T> resolveAsset<T>(
AssetId inputId,
FutureOr<T> Function(Resolver resolver) action, {
PackageConfig? packageConfig,
Set<AssetId>? nonInputsToReadFromFilesystem,
Future<void>? tearDown,
Resolvers? resolvers,
}) {
Expand All @@ -156,6 +160,7 @@ Future<T> resolveAsset<T>(
inputId.package,
action,
packageConfig: packageConfig,
nonInputsToReadFromFilesystem: nonInputsToReadFromFilesystem,
resolverFor: inputId,
tearDown: tearDown,
resolvers: resolvers,
Expand All @@ -172,19 +177,25 @@ Future<T> _resolveAssets<T>(
String rootPackage,
FutureOr<T> Function(Resolver resolver) action, {
PackageConfig? packageConfig,
Set<AssetId>? nonInputsToReadFromFilesystem,
AssetId? resolverFor,
FutureOr<void> Function(InMemoryAssetReader)? assetReaderChecks,
Future<void>? tearDown,
Resolvers? resolvers,
}) async {
final resolvedConfig = packageConfig ??
await loadPackageConfigUri((await Isolate.packageConfig)!);
final assetReader = PackageAssetReader(resolvedConfig, rootPackage);
final resolveBuilder = _ResolveSourceBuilder(
action,
resolverFor,
tearDown,
);

// Prepare the in-memory filesystem the build will run on.
//
// First, add directly-passed [inputs], reading from the filesystem if the
// string passed is [useAssetReader].
final assetReader = PackageAssetReader(resolvedConfig, rootPackage);
final inputAssets = <AssetId, String>{};
await Future.wait(inputs.keys.map((String rawAssetId) async {
final assetId = AssetId.parse(rawAssetId);
Expand All @@ -194,11 +205,19 @@ Future<T> _resolveAssets<T>(
}
inputAssets[assetId] = assetValue;
}));
final inMemory = InMemoryAssetReaderWriter(
final readerWriter = InMemoryAssetReaderWriter(
sourceAssets: inputAssets,
rootPackage: rootPackage,
);

// Then, copy any additionally requested files from the filesystem to the
// in-memory filesystem.
if (nonInputsToReadFromFilesystem != null) {
for (final id in nonInputsToReadFromFilesystem) {
await readerWriter.writeAsBytes(id, await assetReader.readAsBytes(id));
}
}

// Use the default resolver if no experiments are enabled. This is much
// faster.
resolvers ??= packageConfig == null && enabledExperiments.isEmpty
Expand All @@ -216,13 +235,13 @@ Future<T> _resolveAssets<T>(
unawaited(runBuilder(
resolveBuilder,
inputAssets.keys,
MultiAssetReader([inMemory, assetReader]),
inMemory,
readerWriter,
readerWriter,
resolvers,
).catchError((_) {}));
final result = await resolveBuilder.onDone.future;
if (assetReaderChecks != null) {
await assetReaderChecks(inMemory);
await assetReaderChecks(readerWriter);
}
return result;
}
Expand Down
104 changes: 0 additions & 104 deletions build_test/test/multi_asset_reader_test.dart

This file was deleted.

15 changes: 12 additions & 3 deletions build_test/test/resolve_source_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ void main() {
import 'package:collection/collection.dart';

abstract class Foo implements Equality {}
''', (resolver) => resolver.findLibraryNotNull('example'));
''', nonInputsToReadFromFilesystem: {
AssetId('collection', 'lib/collection.dart'),
AssetId('collection', 'lib/src/equality.dart'),
}, (resolver) => resolver.findLibraryNotNull('example'));
var classFoo = libExample.getClass('Foo')!;
expect(
classFoo.allSupertypes.map(_toStringId),
Expand Down Expand Up @@ -85,7 +88,10 @@ void main() {
import 'package:collection/collection.dart';

abstract class Foo implements Equality {}
''', (resolver) => resolver, tearDown: resolverDone.future);
''', nonInputsToReadFromFilesystem: {
AssetId('collection', 'lib/collection.dart'),
AssetId('collection', 'lib/src/equality.dart'),
}, (resolver) => resolver, tearDown: resolverDone.future);
expect(
await resolver.libraries.any((library) => library.name == 'example'),
true);
Expand All @@ -105,7 +111,10 @@ void main() {
import 'package:collection/collection.dart';

abstract class Foo implements Equality {}
''', (resolver) async {
''', nonInputsToReadFromFilesystem: {
AssetId('collection', 'lib/collection.dart'),
AssetId('collection', 'lib/src/equality.dart'),
}, (resolver) async {
var libExample = await resolver.findLibraryNotNull('example');
var classFoo = libExample.getClass('Foo')!;
expect(classFoo.allSupertypes.map(_toStringId),
Expand Down
Loading