| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async'; | 5 import 'dart:async'; |
| 6 import 'dart:io'; | 6 import 'dart:io'; |
| 7 | 7 |
| 8 import 'package:async/async.dart'; |
| 8 import 'package:barback/barback.dart'; | 9 import 'package:barback/barback.dart'; |
| 9 import 'package:path/path.dart' as p; | 10 import 'package:path/path.dart' as p; |
| 10 | 11 |
| 11 import 'barback/asset_environment.dart'; | 12 import 'barback/asset_environment.dart'; |
| 12 import 'entrypoint.dart'; | 13 import 'entrypoint.dart'; |
| 13 import 'exit_codes.dart' as exit_codes; | 14 import 'exit_codes.dart' as exit_codes; |
| 14 import 'io.dart'; | 15 import 'io.dart'; |
| 15 import 'log.dart' as log; | 16 import 'log.dart' as log; |
| 16 import 'utils.dart'; | 17 import 'utils.dart'; |
| 17 | 18 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 | 87 |
| 87 return _runCachedExecutable(entrypoint, localSnapshotPath, args, | 88 return _runCachedExecutable(entrypoint, localSnapshotPath, args, |
| 88 checked: checked); | 89 checked: checked); |
| 89 } | 90 } |
| 90 | 91 |
| 91 // If the command has a path separator, then it's a path relative to the | 92 // If the command has a path separator, then it's a path relative to the |
| 92 // root of the package. Otherwise, it's implicitly understood to be in | 93 // root of the package. Otherwise, it's implicitly understood to be in |
| 93 // "bin". | 94 // "bin". |
| 94 if (p.split(executable).length == 1) executable = p.join("bin", executable); | 95 if (p.split(executable).length == 1) executable = p.join("bin", executable); |
| 95 | 96 |
| 96 var vmArgs = []; | 97 var vmArgs = <String>[]; |
| 97 | 98 |
| 98 // Run in checked mode. | 99 // Run in checked mode. |
| 99 if (checked) vmArgs.add("--checked"); | 100 if (checked) vmArgs.add("--checked"); |
| 100 | 101 |
| 101 var executableUrl = await _executableUrl( | 102 var executableUrl = await _executableUrl( |
| 102 entrypoint, package, executable, isGlobal: isGlobal, mode: mode); | 103 entrypoint, package, executable, isGlobal: isGlobal, mode: mode); |
| 103 | 104 |
| 104 if (executableUrl == null) { | 105 if (executableUrl == null) { |
| 105 var message = "Could not find ${log.bold(executable)}"; | 106 var message = "Could not find ${log.bold(executable)}"; |
| 106 if (isGlobal || package != entrypoint.root.name) { | 107 if (isGlobal || package != entrypoint.root.name) { |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 /// | 212 /// |
| 212 /// If [checked] is set, runs the snapshot in checked mode. | 213 /// If [checked] is set, runs the snapshot in checked mode. |
| 213 /// | 214 /// |
| 214 /// Returns the snapshot's exit code. | 215 /// Returns the snapshot's exit code. |
| 215 /// | 216 /// |
| 216 /// This doesn't do any validation of the snapshot's SDK version. | 217 /// This doesn't do any validation of the snapshot's SDK version. |
| 217 Future<int> runSnapshot(String path, Iterable<String> args, {recompile(), | 218 Future<int> runSnapshot(String path, Iterable<String> args, {recompile(), |
| 218 String packagesFile, bool checked: false}) async { | 219 String packagesFile, bool checked: false}) async { |
| 219 // TODO(nweiz): pass a flag to silence the "Wrong full snapshot version" | 220 // TODO(nweiz): pass a flag to silence the "Wrong full snapshot version" |
| 220 // message when issue 20784 is fixed. | 221 // message when issue 20784 is fixed. |
| 221 var vmArgs = []; | 222 var vmArgs = <String>[]; |
| 222 if (checked) vmArgs.add("--checked"); | 223 if (checked) vmArgs.add("--checked"); |
| 223 | 224 |
| 224 if (packagesFile != null) { | 225 if (packagesFile != null) { |
| 225 // We use an absolute path here not because the VM insists but because it's | 226 // We use an absolute path here not because the VM insists but because it's |
| 226 // helpful for the subprocess to be able to spawn Dart with | 227 // helpful for the subprocess to be able to spawn Dart with |
| 227 // Platform.executableArguments and have that work regardless of the working | 228 // Platform.executableArguments and have that work regardless of the working |
| 228 // directory. | 229 // directory. |
| 229 vmArgs.add("--packages=${p.toUri(p.absolute(packagesFile))}"); | 230 vmArgs.add("--packages=${p.toUri(p.absolute(packagesFile))}"); |
| 230 } | 231 } |
| 231 | 232 |
| 232 vmArgs.add(path); | 233 vmArgs.add(path); |
| 233 vmArgs.addAll(args); | 234 vmArgs.addAll(args); |
| 234 | 235 |
| 235 // We need to split stdin so that we can send the same input both to the | 236 // We need to split stdin so that we can send the same input both to the |
| 236 // first and second process, if we start more than one. | 237 // first and second process, if we start more than one. |
| 237 var stdin1; | 238 var stdin1; |
| 238 var stdin2; | 239 var stdin2; |
| 239 if (recompile == null) { | 240 if (recompile == null) { |
| 240 stdin1 = stdin; | 241 stdin1 = stdin; |
| 241 } else { | 242 } else { |
| 242 var pair = tee(stdin); | 243 var stdins = StreamSplitter.splitFrom(stdin); |
| 243 stdin1 = pair.first; | 244 stdin1 = stdins.first; |
| 244 stdin2 = pair.last; | 245 stdin2 = stdins.last; |
| 245 } | 246 } |
| 246 | 247 |
| 247 runProcess(input) async { | 248 runProcess(input) async { |
| 248 var process = await Process.start(Platform.executable, vmArgs); | 249 var process = await Process.start(Platform.executable, vmArgs); |
| 249 | 250 |
| 250 _forwardSignals(process); | 251 _forwardSignals(process); |
| 251 | 252 |
| 252 // Note: we're not using process.std___.pipe(std___) here because | 253 // Note: we're not using process.std___.pipe(std___) here because |
| 253 // that prevents pub from also writing to the output streams. | 254 // that prevents pub from also writing to the output streams. |
| 254 process.stderr.listen(stderr.add); | 255 process.stderr.listen(stderr.add); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 285 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath, | 286 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath, |
| 286 List<String> args, {bool checked: false}) { | 287 List<String> args, {bool checked: false}) { |
| 287 return runSnapshot(snapshotPath, args, | 288 return runSnapshot(snapshotPath, args, |
| 288 packagesFile: entrypoint.packagesFile, | 289 packagesFile: entrypoint.packagesFile, |
| 289 checked: checked, | 290 checked: checked, |
| 290 recompile: () { | 291 recompile: () { |
| 291 log.fine("Precompiled executable is out of date."); | 292 log.fine("Precompiled executable is out of date."); |
| 292 return entrypoint.precompileExecutables(); | 293 return entrypoint.precompileExecutables(); |
| 293 }); | 294 }); |
| 294 } | 295 } |
| OLD | NEW |