mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Cleanup devicelab framework duplicate (#59046)
* combine forwardStandardStreams * combine exec and eval
This commit is contained in:
parent
e13b44d978
commit
b5d0b9122f
@ -324,8 +324,39 @@ Future<int> exec(
|
|||||||
bool canFail = false, // as in, whether failures are ok. False means that they are fatal.
|
bool canFail = false, // as in, whether failures are ok. False means that they are fatal.
|
||||||
String workingDirectory,
|
String workingDirectory,
|
||||||
}) async {
|
}) async {
|
||||||
final Process process = await startProcess(executable, arguments, environment: environment, workingDirectory: workingDirectory);
|
return _execute(
|
||||||
await forwardStandardStreams(process);
|
executable,
|
||||||
|
arguments,
|
||||||
|
environment: environment,
|
||||||
|
canFail : canFail,
|
||||||
|
workingDirectory: workingDirectory,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<int> _execute(
|
||||||
|
String executable,
|
||||||
|
List<String> arguments, {
|
||||||
|
Map<String, String> environment,
|
||||||
|
bool canFail = false, // as in, whether failures are ok. False means that they are fatal.
|
||||||
|
String workingDirectory,
|
||||||
|
StringBuffer output, // if not null, the stdout will be written here
|
||||||
|
StringBuffer stderr, // if not null, the stderr will be written here
|
||||||
|
bool printStdout = true,
|
||||||
|
bool printStderr = true,
|
||||||
|
}) async {
|
||||||
|
final Process process = await startProcess(
|
||||||
|
executable,
|
||||||
|
arguments,
|
||||||
|
environment: environment,
|
||||||
|
workingDirectory: workingDirectory,
|
||||||
|
);
|
||||||
|
await forwardStandardStreams(
|
||||||
|
process,
|
||||||
|
output: output,
|
||||||
|
stderr: stderr,
|
||||||
|
printStdout: printStdout,
|
||||||
|
printStderr: printStderr,
|
||||||
|
);
|
||||||
final int exitCode = await process.exitCode;
|
final int exitCode = await process.exitCode;
|
||||||
|
|
||||||
if (exitCode != 0 && !canFail)
|
if (exitCode != 0 && !canFail)
|
||||||
@ -335,26 +366,42 @@ Future<int> exec(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Forwards standard out and standard error from [process] to this process'
|
/// Forwards standard out and standard error from [process] to this process'
|
||||||
/// respective outputs.
|
/// respective outputs. Also writes stdout to [output] and stderr to [stderr]
|
||||||
|
/// if they are not null.
|
||||||
///
|
///
|
||||||
/// Returns a future that completes when both out and error streams a closed.
|
/// Returns a future that completes when both out and error streams a closed.
|
||||||
Future<void> forwardStandardStreams(Process process) {
|
Future<void> forwardStandardStreams(
|
||||||
|
Process process, {
|
||||||
|
StringBuffer output,
|
||||||
|
StringBuffer stderr,
|
||||||
|
bool printStdout = true,
|
||||||
|
bool printStderr = true,
|
||||||
|
}) {
|
||||||
final Completer<void> stdoutDone = Completer<void>();
|
final Completer<void> stdoutDone = Completer<void>();
|
||||||
final Completer<void> stderrDone = Completer<void>();
|
final Completer<void> stderrDone = Completer<void>();
|
||||||
process.stdout
|
process.stdout
|
||||||
.transform<String>(utf8.decoder)
|
.transform<String>(utf8.decoder)
|
||||||
.transform<String>(const LineSplitter())
|
.transform<String>(const LineSplitter())
|
||||||
.listen((String line) {
|
.listen((String line) {
|
||||||
|
if (printStdout) {
|
||||||
print('stdout: $line');
|
print('stdout: $line');
|
||||||
|
}
|
||||||
|
output?.writeln(line);
|
||||||
}, onDone: () { stdoutDone.complete(); });
|
}, onDone: () { stdoutDone.complete(); });
|
||||||
process.stderr
|
process.stderr
|
||||||
.transform<String>(utf8.decoder)
|
.transform<String>(utf8.decoder)
|
||||||
.transform<String>(const LineSplitter())
|
.transform<String>(const LineSplitter())
|
||||||
.listen((String line) {
|
.listen((String line) {
|
||||||
|
if (printStderr) {
|
||||||
print('stderr: $line');
|
print('stderr: $line');
|
||||||
|
}
|
||||||
|
stderr?.writeln(line);
|
||||||
}, onDone: () { stderrDone.complete(); });
|
}, onDone: () { stderrDone.complete(); });
|
||||||
|
|
||||||
return Future.wait<void>(<Future<void>>[stdoutDone.future, stderrDone.future]);
|
return Future.wait<void>(<Future<void>>[
|
||||||
|
stdoutDone.future,
|
||||||
|
stderrDone.future,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Executes a command and returns its standard output as a String.
|
/// Executes a command and returns its standard output as a String.
|
||||||
@ -370,36 +417,18 @@ Future<String> eval(
|
|||||||
bool printStdout = true,
|
bool printStdout = true,
|
||||||
bool printStderr = true,
|
bool printStderr = true,
|
||||||
}) async {
|
}) async {
|
||||||
final Process process = await startProcess(executable, arguments, environment: environment, workingDirectory: workingDirectory);
|
|
||||||
|
|
||||||
final StringBuffer output = StringBuffer();
|
final StringBuffer output = StringBuffer();
|
||||||
final Completer<void> stdoutDone = Completer<void>();
|
await _execute(
|
||||||
final Completer<void> stderrDone = Completer<void>();
|
executable,
|
||||||
process.stdout
|
arguments,
|
||||||
.transform<String>(utf8.decoder)
|
environment: environment,
|
||||||
.transform<String>(const LineSplitter())
|
canFail: canFail,
|
||||||
.listen((String line) {
|
workingDirectory: workingDirectory,
|
||||||
if (printStdout) {
|
output: output,
|
||||||
print('stdout: $line');
|
stderr: stderr,
|
||||||
}
|
printStdout: printStdout,
|
||||||
output.writeln(line);
|
printStderr: printStderr,
|
||||||
}, onDone: () { stdoutDone.complete(); });
|
);
|
||||||
process.stderr
|
|
||||||
.transform<String>(utf8.decoder)
|
|
||||||
.transform<String>(const LineSplitter())
|
|
||||||
.listen((String line) {
|
|
||||||
if (printStderr) {
|
|
||||||
print('stderr: $line');
|
|
||||||
}
|
|
||||||
stderr?.writeln(line);
|
|
||||||
}, onDone: () { stderrDone.complete(); });
|
|
||||||
|
|
||||||
await Future.wait<void>(<Future<void>>[stdoutDone.future, stderrDone.future]);
|
|
||||||
final int exitCode = await process.exitCode;
|
|
||||||
|
|
||||||
if (exitCode != 0 && !canFail)
|
|
||||||
fail('Executable "$executable" failed with exit code $exitCode.');
|
|
||||||
|
|
||||||
return output.toString().trimRight();
|
return output.toString().trimRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user