Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Side by Side Diff: lib/src/executable.dart

Issue 1272813003: Support "--checked" in pub run and global run. (Closed) Base URL: https://github.com/dart-lang/pub.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 library pub.executable; 5 library pub.executable;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'package:barback/barback.dart'; 10 import 'package:barback/barback.dart';
(...skipping 26 matching lines...) Expand all
37 37
38 /// Runs [executable] from [package] reachable from [entrypoint]. 38 /// Runs [executable] from [package] reachable from [entrypoint].
39 /// 39 ///
40 /// The executable string is a relative Dart file path using native path 40 /// The executable string is a relative Dart file path using native path
41 /// separators with or without a trailing ".dart" extension. It is contained 41 /// separators with or without a trailing ".dart" extension. It is contained
42 /// within [package], which should either be the entrypoint package or an 42 /// within [package], which should either be the entrypoint package or an
43 /// immediate dependency of it. 43 /// immediate dependency of it.
44 /// 44 ///
45 /// Arguments from [args] will be passed to the spawned Dart application. 45 /// Arguments from [args] will be passed to the spawned Dart application.
46 /// 46 ///
47 /// If [mode] is passed, it's used as the barback mode; it defaults to 47 /// If [checked] is true, the program is run in checked mode. If [mode] is
48 /// [BarbackMode.RELEASE]. 48 /// passed, it's used as the barback mode; it defaults to [BarbackMode.RELEASE].
49 /// 49 ///
50 /// Returns the exit code of the spawned app. 50 /// Returns the exit code of the spawned app.
51 Future<int> runExecutable(Entrypoint entrypoint, String package, 51 Future<int> runExecutable(Entrypoint entrypoint, String package,
52 String executable, Iterable<String> args, {bool isGlobal: false, 52 String executable, Iterable<String> args, {bool isGlobal: false,
53 BarbackMode mode}) async { 53 bool checked: false, BarbackMode mode}) async {
54 if (mode == null) mode = BarbackMode.RELEASE; 54 if (mode == null) mode = BarbackMode.RELEASE;
55 55
56 // Make sure the package is an immediate dependency of the entrypoint or the 56 // Make sure the package is an immediate dependency of the entrypoint or the
57 // entrypoint itself. 57 // entrypoint itself.
58 if (entrypoint.root.name != package && 58 if (entrypoint.root.name != package &&
59 !entrypoint.root.immediateDependencies 59 !entrypoint.root.immediateDependencies
60 .any((dep) => dep.name == package)) { 60 .any((dep) => dep.name == package)) {
61 var graph = await entrypoint.loadPackageGraph(); 61 var graph = await entrypoint.loadPackageGraph();
62 if (graph.packages.containsKey(package)) { 62 if (graph.packages.containsKey(package)) {
63 dataError('Package "$package" is not an immediate dependency.\n' 63 dataError('Package "$package" is not an immediate dependency.\n'
(...skipping 13 matching lines...) Expand all
77 // Ensure that there's a trailing extension. 77 // Ensure that there's a trailing extension.
78 if (p.extension(executable) != ".dart") executable += ".dart"; 78 if (p.extension(executable) != ".dart") executable += ".dart";
79 79
80 var localSnapshotPath = p.join(".pub", "bin", package, 80 var localSnapshotPath = p.join(".pub", "bin", package,
81 "$executable.snapshot"); 81 "$executable.snapshot");
82 if (!isGlobal && fileExists(localSnapshotPath) && 82 if (!isGlobal && fileExists(localSnapshotPath) &&
83 // Dependencies are only snapshotted in release mode, since that's the 83 // Dependencies are only snapshotted in release mode, since that's the
84 // default mode for them to run. We can't run them in a different mode 84 // default mode for them to run. We can't run them in a different mode
85 // using the snapshot. 85 // using the snapshot.
86 mode == BarbackMode.RELEASE) { 86 mode == BarbackMode.RELEASE) {
87 return _runCachedExecutable(entrypoint, localSnapshotPath, args); 87 return _runCachedExecutable(entrypoint, localSnapshotPath, args,
88 checked: checked);
88 } 89 }
89 90
90 // If the command has a path separator, then it's a path relative to the 91 // If the command has a path separator, then it's a path relative to the
91 // root of the package. Otherwise, it's implicitly understood to be in 92 // root of the package. Otherwise, it's implicitly understood to be in
92 // "bin". 93 // "bin".
93 if (p.split(executable).length == 1) executable = p.join("bin", executable); 94 if (p.split(executable).length == 1) executable = p.join("bin", executable);
94 95
95 var vmArgs = []; 96 var vmArgs = [];
96 97
97 // Run in checked mode. 98 // Run in checked mode.
98 // TODO(rnystrom): Make this configurable. 99 if (checked) vmArgs.add("--checked");
99 vmArgs.add("--checked");
100 100
101 var executableUrl = await _executableUrl( 101 var executableUrl = await _executableUrl(
102 entrypoint, package, executable, isGlobal: isGlobal, mode: mode); 102 entrypoint, package, executable, isGlobal: isGlobal, mode: mode);
103 103
104 if (executableUrl == null) { 104 if (executableUrl == null) {
105 var message = "Could not find ${log.bold(executable)}"; 105 var message = "Could not find ${log.bold(executable)}";
106 if (package != entrypoint.root.name) { 106 if (package != entrypoint.root.name) {
107 message += " in package ${log.bold(package)}"; 107 message += " in package ${log.bold(package)}";
108 } 108 }
109 log.error("$message."); 109 log.error("$message.");
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 for (var signal in _catchableSignals) { 261 for (var signal in _catchableSignals) {
262 signal.watch().listen((_) { 262 signal.watch().listen((_) {
263 log.fine("Forwarding $signal to running process."); 263 log.fine("Forwarding $signal to running process.");
264 process.kill(signal); 264 process.kill(signal);
265 }); 265 });
266 } 266 }
267 } 267 }
268 268
269 /// Runs the executable snapshot at [snapshotPath]. 269 /// Runs the executable snapshot at [snapshotPath].
270 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath, 270 Future<int> _runCachedExecutable(Entrypoint entrypoint, String snapshotPath,
271 List<String> args) { 271 List<String> args, {bool checked}) {
nweiz 2015/08/06 00:08:28 ": false"
Bob Nystrom 2015/08/06 16:54:42 Done.
272 return runSnapshot(snapshotPath, args, checked: true, recompile: () { 272 return runSnapshot(snapshotPath, args, checked: checked, recompile: () {
273 log.fine("Precompiled executable is out of date."); 273 log.fine("Precompiled executable is out of date.");
274 return entrypoint.precompileExecutables(); 274 return entrypoint.precompileExecutables();
275 }); 275 });
276 } 276 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698