| Index: sdk/lib/_internal/pub/lib/src/io.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
|
| index f93f34c6d2eccfb801e5519acf96d8044b2edbfc..c0b5c2b875df897ecfe989ef7444439b48ec54dd 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/io.dart
|
| +++ b/sdk/lib/_internal/pub/lib/src/io.dart
|
| @@ -492,17 +492,8 @@ Future<PubProcessResult> runProcess(String executable, List<String> args,
|
| return _descriptorPool.withResource(() {
|
| return _doProcess(Process.run, executable, args, workingDir, environment)
|
| .then((result) {
|
| - // TODO(rnystrom): Remove this and change to returning one string.
|
| - List<String> toLines(String output) {
|
| - var lines = splitLines(output);
|
| - if (!lines.isEmpty && lines.last == "") lines.removeLast();
|
| - return lines;
|
| - }
|
| -
|
| - var pubResult = new PubProcessResult(toLines(result.stdout),
|
| - toLines(result.stderr),
|
| - result.exitCode);
|
| -
|
| + var pubResult = new PubProcessResult(
|
| + result.stdout, result.stderr, result.exitCode);
|
| log.processResult(executable, pubResult);
|
| return pubResult;
|
| });
|
| @@ -527,6 +518,17 @@ Future<PubProcess> startProcess(String executable, List<String> args,
|
| });
|
| }
|
|
|
| +/// Like [runProcess], but synchronous.
|
| +PubProcessResult runProcessSync(String executable, List<String> args,
|
| + {String workingDir, Map<String, String> environment}) {
|
| + var result = _doProcess(
|
| + Process.runSync, executable, args, workingDir, environment);
|
| + var pubResult = new PubProcessResult(
|
| + result.stdout, result.stderr, result.exitCode);
|
| + log.processResult(executable, pubResult);
|
| + return pubResult;
|
| +}
|
| +
|
| /// A wrapper around [Process] that exposes `dart:async`-style APIs.
|
| class PubProcess {
|
| /// The underlying `dart:io` [Process].
|
| @@ -612,9 +614,9 @@ class PubProcess {
|
| }
|
|
|
| /// Calls [fn] with appropriately modified arguments. [fn] should have the same
|
| -/// signature as [Process.start], except that the returned [Future] may have a
|
| -/// type other than [Process].
|
| -Future _doProcess(Function fn, String executable, List<String> args,
|
| +/// signature as [Process.start], except that the returned value may have any
|
| +/// return type.
|
| +_doProcess(Function fn, String executable, List<String> args,
|
| String workingDir, Map<String, String> environment) {
|
| // TODO(rnystrom): Should dart:io just handle this?
|
| // Spawning a process on Windows will not look for the executable in the
|
| @@ -628,10 +630,9 @@ Future _doProcess(Function fn, String executable, List<String> args,
|
|
|
| log.process(executable, args, workingDir == null ? '.' : workingDir);
|
|
|
| - return Chain.track(fn(executable,
|
| - args,
|
| + return fn(executable, args,
|
| workingDirectory: workingDir,
|
| - environment: environment));
|
| + environment: environment);
|
| }
|
|
|
| /// Wraps [input], an asynchronous network operation to provide a timeout.
|
| @@ -847,7 +848,16 @@ class PubProcessResult {
|
| final List<String> stderr;
|
| final int exitCode;
|
|
|
| - const PubProcessResult(this.stdout, this.stderr, this.exitCode);
|
| + PubProcessResult(String stdout, String stderr, this.exitCode)
|
| + : this.stdout = _toLines(stdout),
|
| + this.stderr = _toLines(stderr);
|
| +
|
| + // TODO(rnystrom): Remove this and change to returning one string.
|
| + static List<String> _toLines(String output) {
|
| + var lines = splitLines(output);
|
| + if (!lines.isEmpty && lines.last == "") lines.removeLast();
|
| + return lines;
|
| + }
|
|
|
| bool get success => exitCode == exit_codes.SUCCESS;
|
| }
|
|
|