Skip to content
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
1 change: 1 addition & 0 deletions build_runner/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
- Bug fix: with `build_runner serve`, special handling of paths containing
`/packages/` was hiding actual folders called `packages`. Serve the actual
folders first, before trying the package lookup.
- Remove `build_script_generate.dart`.

## 2.7.0

Expand Down
7 changes: 0 additions & 7 deletions build_runner/lib/build_script_generate.dart

This file was deleted.

25 changes: 8 additions & 17 deletions build_runner/lib/src/build_script_generate/bootstrap.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,38 +18,29 @@ import 'build_script_generate.dart';

/// Generates the build script, precompiles it if needed, and runs it.
///
/// The [handleUncaughtError] function will be invoked when the build script
/// terminates with an uncaught error.
///
/// Will retry once on [IsolateSpawnException]s to handle SDK updates.
///
/// Returns the exit code from running the build script.
///
/// If an exit code of 75 is returned, this function should be re-ran.
///
/// Pass [script] to override the default build script for testing.
Future<int> generateAndRun(
List<String> args, {
List<String>? experiments,
Logger? logger,
Future<String> Function() generateBuildScript = generateBuildScript,
void Function(Object error, StackTrace stackTrace) handleUncaughtError =
_defaultHandleUncaughtError,
String? script,
}) {
return buildLog.runWithLoggerDisplay(
logger,
() => _generateAndRun(
args,
experiments,
generateBuildScript,
handleUncaughtError,
),
() => _generateAndRun(args, experiments, script),
);
}

Future<int> _generateAndRun(
List<String> args,
List<String>? experiments,
Future<String> Function() generateBuildScript,
void Function(Object error, StackTrace stackTrace) handleUncaughtError,
String? script,
) async {
experiments ??= [];
ReceivePort? exitPort;
Expand All @@ -72,7 +63,7 @@ Future<int> _generateAndRun(
if (buildScript.existsSync()) {
oldContents = buildScript.readAsStringSync();
}
var newContents = await generateBuildScript();
var newContents = script ?? await generateBuildScript();
// Only trigger a build script update if necessary.
if (newContents != oldContents) {
buildScript
Expand Down Expand Up @@ -101,7 +92,7 @@ Future<int> _generateAndRun(
final error = e[0] ?? TypeError();
final trace = Trace.parse(e[1] as String? ?? '').terse;

handleUncaughtError(error, trace);
_handleUncaughtError(error, trace);
if (buildProcessState.isolateExitCode == null ||
buildProcessState.isolateExitCode == 0) {
buildProcessState.isolateExitCode = 1;
Expand Down Expand Up @@ -273,7 +264,7 @@ Future<bool> _checkImportantPackageDepsAndExperiments(
return true;
}

void _defaultHandleUncaughtError(Object error, StackTrace stackTrace) {
void _handleUncaughtError(Object error, StackTrace stackTrace) {
stderr
..writeln('\n\nYou have hit a bug in build_runner')
..writeln(
Expand Down
51 changes: 8 additions & 43 deletions build_runner/test/build_script_generate/bootstrap_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ library;

import 'dart:io';

import 'package:build_runner/build_script_generate.dart';
import 'package:build_runner/src/build_script_generate/bootstrap.dart';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';
import 'package:build_runner/src/build_script_generate/build_script_generate.dart';
import 'package:build_runner_core/build_runner_core.dart';
Expand All @@ -28,8 +28,7 @@ void main() {
test('writes dill', () async {
await generateAndRun(
[],
generateBuildScript:
() async => '''
script: '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

Expand All @@ -55,18 +54,17 @@ void main(_, [SendPort? sendPort]) async {
''';

buildProcessState.isolateExitCode = 6;
await generateAndRun([], generateBuildScript: () async => script);
await generateAndRun([], script: script);
expect(buildProcessState.isolateExitCode, 7);
await generateAndRun([], generateBuildScript: () async => script);
await generateAndRun([], script: script);
expect(buildProcessState.isolateExitCode, 8);
});

test('rewrites dill if script changed', () async {
expect(
await generateAndRun(
[],
generateBuildScript:
() async => '''
script: '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

Expand All @@ -84,8 +82,7 @@ void main(_, [SendPort? sendPort]) async {
expect(
await generateAndRun(
[],
generateBuildScript:
() async => '''
script: '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

Expand All @@ -109,8 +106,7 @@ void main(_, [SendPort? sendPort]) async {
expect(
await generateAndRun(
[],
generateBuildScript:
() async => '''
script: '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

Expand All @@ -132,8 +128,7 @@ void main(_, [SendPort? sendPort]) async {
expect(
await generateAndRun(
[],
generateBuildScript:
() async => '''
script: '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

Expand All @@ -148,35 +143,5 @@ void main(_, [SendPort? sendPort]) async {
);
},
);

test('invokes custom error function', () async {
Object? error;
StackTrace? stackTrace;

await expectLater(
generateAndRun(
[],
generateBuildScript: () async {
return '''
import 'dart:isolate';
import 'package:build_runner/src/build_script_generate/build_process_state.dart';

void main(_, [SendPort? sendPort]) async {
await buildProcessState.receive(sendPort);
throw 'expected error';
}
''';
},
handleUncaughtError: (err, trace) {
error = err;
stackTrace = trace;
},
),
completion(1),
);

expect(error, 'expected error');
expect(stackTrace, isNotNull);
});
});
}
8 changes: 3 additions & 5 deletions build_runner/test/build_script_generate/experiments_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
@TestOn('vm')
library;

import 'package:build_runner/build_script_generate.dart';
import 'package:build_runner/src/build_script_generate/bootstrap.dart';
import 'package:logging/logging.dart';
import 'package:test/test.dart';

Expand All @@ -17,8 +17,7 @@ void main() {
final exitCode = await generateAndRun(
[],
experiments: ['records'],
generateBuildScript: () async {
return '''
script: '''
// @dart=3.0
import 'dart:io';
import 'dart:isolate';
Expand All @@ -30,8 +29,7 @@ void main() {
buildProcessState.isolateExitCode = (x.\$2);
buildProcessState.send(sendPort);
}
''';
},
''',
logger: logger,
);
expect(exitCode, 2);
Expand Down
Loading