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

Unified Diff: runtime/bin/process_patch.dart

Issue 21816002: Add Process.runSync for running processe synchronously. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed Mac OS issue Created 7 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 side-by-side diff with in-line comments
Download patch
Index: runtime/bin/process_patch.dart
diff --git a/runtime/bin/process_patch.dart b/runtime/bin/process_patch.dart
index 6d69139ab28c5aaff4e3bb47230b7366336a418c..62489ca65205be25a8474c6815255de856390592 100644
--- a/runtime/bin/process_patch.dart
+++ b/runtime/bin/process_patch.dart
@@ -49,6 +49,25 @@ patch class Process {
stdoutEncoding,
stderrEncoding);
}
+
+ /* patch */ static ProcessResult runSync(
+ String executable,
+ List<String> arguments,
+ {String workingDirectory,
+ Map<String, String> environment,
+ bool includeParentEnvironment: true,
+ bool runInShell: false,
+ Encoding stdoutEncoding: Encoding.SYSTEM,
+ Encoding stderrEncoding: Encoding.SYSTEM}) {
+ return _runNonInteractiveProcessSync(executable,
+ arguments,
+ workingDirectory,
+ environment,
+ includeParentEnvironment,
+ runInShell,
+ stdoutEncoding,
+ stderrEncoding);
+ }
}
@@ -278,6 +297,43 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
return completer.future;
}
+ ProcessResult _runAndWait(Encoding stdoutEncoding,
+ Encoding stderrEncoding) {
+ var status = new _ProcessStartStatus();
+ bool success = _startNative(_path,
+ _arguments,
+ _workingDirectory,
+ _environment,
+ _stdin._sink._nativeSocket,
+ _stdout._stream._nativeSocket,
+ _stderr._stream._nativeSocket,
+ _exitHandler._nativeSocket,
+ status);
+ if (!success) {
+ throw new ProcessException(_path,
+ _arguments,
+ status._errorMessage,
+ status._errorCode);
+ }
+
+ var result = _wait(
+ _stdin._sink._nativeSocket,
+ _stdout._stream._nativeSocket,
+ _stderr._stream._nativeSocket,
+ _exitHandler._nativeSocket);
+
+ getOutput(output, encoding) {
+ if (stderrEncoding == null) return output;
+ return _decodeString(output, encoding);
+ }
+
+ return new _ProcessResult(
+ result[0],
+ result[1],
+ getOutput(result[2], stdoutEncoding),
+ getOutput(result[3], stderrEncoding));
+ }
+
bool _startNative(String path,
List<String> arguments,
String workingDirectory,
@@ -288,6 +344,11 @@ class _ProcessImpl extends NativeFieldWrapperClass1 implements Process {
_NativeSocket exitHandler,
_ProcessStartStatus status) native "Process_Start";
+ _wait(_NativeSocket stdin,
+ _NativeSocket stdout,
+ _NativeSocket stderr,
+ _NativeSocket exitHandler) native "Process_Wait";
+
Stream<List<int>> get stdout {
return _stdout;
}
@@ -383,6 +444,24 @@ Future<ProcessResult> _runNonInteractiveProcess(String path,
});
}
+ProcessResult _runNonInteractiveProcessSync(
+ String executable,
+ List<String> arguments,
+ String workingDirectory,
+ Map<String, String> environment,
+ bool includeParentEnvironment,
+ bool runInShell,
+ Encoding stdoutEncoding,
+ Encoding stderrEncoding) {
+ var process = new _ProcessImpl(executable,
+ arguments,
+ workingDirectory,
+ environment,
+ includeParentEnvironment,
+ runInShell);
+ return process._runAndWait(stdoutEncoding, stderrEncoding);
+}
+
class _ProcessResult implements ProcessResult {
const _ProcessResult(int this.pid,

Powered by Google App Engine
This is Rietveld 408576698