Skip to content

Commit 4072f93

Browse files
committed
More.
1 parent 91e2efd commit 4072f93

File tree

10 files changed

+66
-384
lines changed

10 files changed

+66
-384
lines changed

build_runner/lib/src/bootstrap/bootstrap.dart

Lines changed: 0 additions & 269 deletions
This file was deleted.

build_runner/lib/src/bootstrap/bootstrapper.dart

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ import 'package:built_collection/built_collection.dart';
88
import 'package:io/io.dart';
99
import 'package:package_config/package_config.dart';
1010

11-
import '../logging/build_log.dart';
12-
import 'build_script_generate.dart';
11+
import '../internal.dart';
1312
import 'compiler.dart';
1413
import 'depfiles.dart';
1514
import 'runner.dart';
1615

1716
// DO NOT SUBMIT
1817
// ignore_for_file: deprecated_member_use
1918
// ignore_for_file: only_throw_errors
19+
//
2020

2121
class Bootstrapper {
2222
final Depfile buildRunnerDepfile = Depfile(
@@ -78,6 +78,18 @@ class Bootstrapper {
7878
await _checkBuildSource(force: buildRunnerHasChanged!);
7979
await _checkBuildDill();
8080

81+
if (buildRunnerHasChanged! ||
82+
buildYamlHasChanged! ||
83+
buildDillHasChanged!) {
84+
// TODO separate script changes from yaml changes?
85+
if (buildYamlHasChanged!) {
86+
buildLog.fullBuildBecause(FullBuildReason.incompatibleScript);
87+
} else {
88+
buildLog.fullBuildBecause(FullBuildReason.incompatibleBuild);
89+
}
90+
buildProcessState.outputsAreFromStaleBuildScript = true;
91+
}
92+
8193
final exitCode = await Runner().run(arguments);
8294
if (exitCode != ExitCode.tempFail.code) {
8395
return exitCode;

build_runner/lib/src/bootstrap/build_process_state.dart

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// BSD-style license that can be found in the LICENSE file.
44

55
import 'dart:async';
6+
import 'dart:convert';
7+
import 'dart:io';
68
import 'dart:isolate';
79

810
/// State for the whole build process.
@@ -21,6 +23,12 @@ class BuildProcessState {
2123
int? get isolateExitCode => _state['isolateExitCode'] as int?;
2224
set isolateExitCode(int? value) => _state['isolateExitCode'] = value;
2325

26+
/// Whether outputs are from a previous build script.
27+
bool get outputsAreFromStaleBuildScript =>
28+
_state['outputsAreFromStaleBuildScript'] as bool? ?? false;
29+
set outputsAreFromStaleBuildScript(bool value) =>
30+
_state['outputsAreFromStaleBuildScript'] = value;
31+
2432
/// For `buildLog`, the log mode.
2533
BuildLogMode get buildLogMode => BuildLogMode.values.singleWhere(
2634
(mode) => mode.name == _state['buildLogMode'],
@@ -55,31 +63,33 @@ class BuildProcessState {
5563
_beforeSends.add(function);
5664
}
5765

58-
/// Sends `this` to [sendPort].
59-
Future<void> send(SendPort? sendPort) async {
66+
void write() async {
6067
for (final beforeSend in _beforeSends) {
6168
beforeSend();
6269
}
63-
sendPort?.send(_state);
70+
File(
71+
'.dart_tool/build/entrypoint/state.json',
72+
).writeAsStringSync(json.encode(_state));
6473
}
6574

6675
void doAfterReceive(void Function() function) {
6776
_afterReceives.add(function);
6877
}
6978

70-
/// Receives `this` from [sendPort], by sending a `SendPort` then listening
71-
/// on its corresponding `ReceivePort`.
72-
Future<void> receive(SendPort? sendPort) async {
73-
if (sendPort == null) {
74-
_state.clear();
75-
return;
76-
}
77-
final receivePort = ReceivePort();
78-
sendPort.send(receivePort.sendPort);
79-
final received = await receivePort.first;
79+
void read() async {
80+
var data = <String, Object?>{};
81+
try {
82+
data =
83+
json.decode(
84+
File(
85+
'.dart_tool/build/entrypoint/state.json',
86+
).readAsStringSync(),
87+
)
88+
as Map<String, Object?>;
89+
} catch (_) {}
8090
_state
8191
..clear()
82-
..addAll(received as Map<String, Object?>);
92+
..addAll(data);
8393
for (final afterReceive in _afterReceives) {
8494
afterReceive();
8595
}

0 commit comments

Comments
 (0)