@@ -11,6 +11,8 @@ import 'package:stack_trace/stack_trace.dart';
11
11
12
12
import '../pubspec.dart' ;
13
13
14
+ const _packagesFileName = '.packages' ;
15
+
14
16
/// Extend to get a command with the arguments common to all build_runner
15
17
/// commands.
16
18
abstract class BuildRunnerCommandBase extends Command <int > {
@@ -30,6 +32,8 @@ abstract class BuildRunnerCommandBase extends Command<int> {
30
32
Future <int > runCore (String command) async {
31
33
await checkPubspecLock ();
32
34
35
+ var buildRunnerScript = await _buildRunnerScript ();
36
+
33
37
final arguments = [command]..addAll (argResults.arguments);
34
38
35
39
var exitCode = 0 ;
@@ -49,8 +53,7 @@ abstract class BuildRunnerCommandBase extends Command<int> {
49
53
stderr.writeln (new Trace .parse (trace).terse);
50
54
if (exitCode == 0 ) exitCode = 1 ;
51
55
});
52
- await Isolate .spawnUri (
53
- await _buildRunnerScript (), arguments, messagePort.sendPort,
56
+ await Isolate .spawnUri (buildRunnerScript, arguments, messagePort.sendPort,
54
57
onExit: exitPort.sendPort,
55
58
onError: errorPort.sendPort,
56
59
automaticPackageResolution: true );
@@ -74,6 +77,13 @@ abstract class BuildRunnerCommandBase extends Command<int> {
74
77
}
75
78
76
79
Future <Uri > _buildRunnerScript () async {
80
+ var packagesFile = new File (_packagesFileName);
81
+ if (! packagesFile.existsSync ()) {
82
+ throw new FileSystemException (
83
+ 'A `$_packagesFileName ` file does not exist in the target directory.' ,
84
+ packagesFile.absolute.path);
85
+ }
86
+
77
87
var dataUri = new Uri .dataFromString (_bootstrapScript);
78
88
79
89
var messagePort = new ReceivePort ();
@@ -84,7 +94,7 @@ Future<Uri> _buildRunnerScript() async {
84
94
onExit: exitPort.sendPort,
85
95
onError: errorPort.sendPort,
86
96
errorsAreFatal: true ,
87
- packageConfig: new Uri .file ('.packages' ));
97
+ packageConfig: new Uri .file (_packagesFileName ));
88
98
89
99
var allErrorsFuture = errorPort.forEach ((error) {
90
100
var errorList = error as List ;
@@ -106,7 +116,7 @@ Future<Uri> _buildRunnerScript() async {
106
116
107
117
var messages = items[0 ] as List ;
108
118
if (messages.isEmpty) {
109
- throw new StateError ('An error occurred while running booting .' );
119
+ throw new StateError ('An error occurred while bootstrapping .' );
110
120
}
111
121
112
122
assert (messages.length == 1 );
0 commit comments