Index: pkg/dev_compiler/tool/input_sdk/lib/io/process.dart |
diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/process.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/process.dart |
deleted file mode 100644 |
index 93aa63e0f3aa323a527d3cabbfce310782626d3a..0000000000000000000000000000000000000000 |
--- a/pkg/dev_compiler/tool/input_sdk/lib/io/process.dart |
+++ /dev/null |
@@ -1,581 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-part of dart.io; |
- |
-// TODO(ager): The only reason for this class is that we |
-// cannot patch a top-level at this point. |
-class _ProcessUtils { |
- external static void _exit(int status); |
- external static void _setExitCode(int status); |
- external static int _getExitCode(); |
- external static void _sleep(int millis); |
- external static int _pid(Process process); |
- external static Stream<ProcessSignal> _watchSignal(ProcessSignal signal); |
-} |
- |
-/** |
- * Exit the Dart VM process immediately with the given exit code. |
- * |
- * This does not wait for any asynchronous operations to terminate. Using |
- * [exit] is therefore very likely to lose data. |
- * |
- * The handling of exit codes is platform specific. |
- * |
- * On Linux and OS X an exit code for normal termination will always |
- * be in the range [0..255]. If an exit code outside this range is |
- * set the actual exit code will be the lower 8 bits masked off and |
- * treated as an unsigned value. E.g. using an exit code of -1 will |
- * result in an actual exit code of 255 being reported. |
- * |
- * On Windows the exit code can be set to any 32-bit value. However |
- * some of these values are reserved for reporting system errors like |
- * crashes. |
- * |
- * Besides this the Dart executable itself uses an exit code of `254` |
- * for reporting compile time errors and an exit code of `255` for |
- * reporting runtime error (unhandled exception). |
- * |
- * Due to these facts it is recommended to only use exit codes in the |
- * range [0..127] for communicating the result of running a Dart |
- * program to the surrounding environment. This will avoid any |
- * cross-platform issues. |
- */ |
-void exit(int code) { |
- if (code is !int) { |
- throw new ArgumentError("Integer value for exit code expected"); |
- } |
- _ProcessUtils._exit(code); |
-} |
- |
-/** |
- * Set the global exit code for the Dart VM. |
- * |
- * The exit code is global for the Dart VM and the last assignment to |
- * exitCode from any isolate determines the exit code of the Dart VM |
- * on normal termination. |
- * |
- * Default value is `0`. |
- * |
- * See [exit] for more information on how to chose a value for the |
- * exit code. |
- */ |
-void set exitCode(int code) { |
- if (code is !int) { |
- throw new ArgumentError("Integer value for exit code expected"); |
- } |
- _ProcessUtils._setExitCode(code); |
-} |
- |
-/** |
- * Get the global exit code for the Dart VM. |
- * |
- * The exit code is global for the Dart VM and the last assignment to |
- * exitCode from any isolate determines the exit code of the Dart VM |
- * on normal termination. |
- * |
- * See [exit] for more information on how to chose a value for the |
- * exit code. |
- */ |
-int get exitCode => _ProcessUtils._getExitCode(); |
- |
-/** |
- * Sleep for the duration specified in [duration]. |
- * |
- * Use this with care, as no asynchronous operations can be processed |
- * in a isolate while it is blocked in a [sleep] call. |
- */ |
-void sleep(Duration duration) { |
- int milliseconds = duration.inMilliseconds; |
- if (milliseconds < 0) { |
- throw new ArgumentError("sleep: duration cannot be negative"); |
- } |
- _ProcessUtils._sleep(milliseconds); |
-} |
- |
-/** |
- * Returns the PID of the current process. |
- */ |
-int get pid => _ProcessUtils._pid(null); |
- |
-/** |
- * Modes for running a new process. |
- */ |
-enum ProcessStartMode { |
- /// Normal child process. |
- NORMAL, |
- /// Detached child process with no open communication channel. |
- DETACHED, |
- /// Detached child process with stdin, stdout and stderr still open |
- /// for communication with the child. |
- DETACHED_WITH_STDIO |
-} |
- |
-/** |
- * The means to execute a program. |
- * |
- * Use the static [start] and [run] methods to start a new process. |
- * The run method executes the process non-interactively to completion. |
- * In contrast, the start method allows your code to interact with the |
- * running process. |
- * |
- * ## Start a process with the run method |
- * |
- * The following code sample uses the run method to create a process |
- * that runs the UNIX command `ls`, which lists the contents of a directory. |
- * The run method completes with a [ProcessResult] object when the process |
- * terminates. This provides access to the output and exit code from the |
- * process. The run method does not return a Process object; this prevents your |
- * code from interacting with the running process. |
- * |
- * import 'dart:io'; |
- * |
- * main() { |
- * // List all files in the current directory in UNIX-like systems. |
- * Process.run('ls', ['-l']).then((ProcessResult results) { |
- * print(results.stdout); |
- * }); |
- * } |
- * |
- * ## Start a process with the start method |
- * |
- * The following example uses start to create the process. |
- * The start method returns a [Future] for a Process object. |
- * When the future completes the process is started and |
- * your code can interact with the |
- * Process: writing to stdin, listening to stdout, and so on. |
- * |
- * The following sample starts the UNIX `cat` utility, which when given no |
- * command-line arguments, echos its input. |
- * The program writes to the process's standard input stream |
- * and prints data from its standard output stream. |
- * |
- * import 'dart:io'; |
- * import 'dart:convert'; |
- * |
- * main() { |
- * Process.start('cat', []).then((Process process) { |
- * process.stdout |
- * .transform(UTF8.decoder) |
- * .listen((data) { print(data); }); |
- * process.stdin.writeln('Hello, world!'); |
- * process.stdin.writeln('Hello, galaxy!'); |
- * process.stdin.writeln('Hello, universe!'); |
- * }); |
- * } |
- * |
- * ## Standard I/O streams |
- * |
- * As seen in the previous code sample, you can interact with the Process's |
- * standard output stream through the getter [stdout], |
- * and you can interact with the Process's standard input stream through |
- * the getter [stdin]. |
- * In addition, Process provides a getter [stderr] for using the Process's |
- * standard error stream. |
- * |
- * A Process's streams are distinct from the top-level streams |
- * for the current program. |
- * |
- * ## Exit codes |
- * |
- * Call the [exitCode] method to get the exit code of the process. |
- * The exit code indicates whether the program terminated successfully |
- * (usually indicated with an exit code of 0) or with an error. |
- * |
- * If the start method is used, the exitCode is available through a future |
- * on the Process object (as shown in the example below). |
- * If the run method is used, the exitCode is available |
- * through a getter on the ProcessResult instance. |
- * |
- * import 'dart:io'; |
- * |
- * main() { |
- * Process.start('ls', ['-l']).then((process) { |
- * // Get the exit code from the new process. |
- * process.exitCode.then((exitCode) { |
- * print('exit code: $exitCode'); |
- * }); |
- * }); |
- * } |
- * |
- * ## Other resources |
- * |
- * [Dart by Example](https://www.dartlang.org/dart-by-example/#dart-io-and-command-line-apps) |
- * provides additional task-oriented code samples that show how to use |
- * various API from the [dart:io] library. |
- */ |
-abstract class Process { |
- /** |
- * Returns a [:Future:] which completes with the exit code of the process |
- * when the process completes. |
- * |
- * The handling of exit codes is platform specific. |
- * |
- * On Linux and OS X a normal exit code will be a positive value in |
- * the range [0..255]. If the process was terminated due to a signal |
- * the exit code will be a negative value in the range [-255..-1], |
- * where the absolute value of the exit code is the signal |
- * number. For example, if a process crashes due to a segmentation |
- * violation the exit code will be -11, as the signal SIGSEGV has the |
- * number 11. |
- * |
- * On Windows a process can report any 32-bit value as an exit |
- * code. When returning the exit code this exit code is turned into |
- * a signed value. Some special values are used to report |
- * termination due to some system event. E.g. if a process crashes |
- * due to an access violation the 32-bit exit code is `0xc0000005`, |
- * which will be returned as the negative number `-1073741819`. To |
- * get the original 32-bit value use `(0x100000000 + exitCode) & |
- * 0xffffffff`. |
- */ |
- Future<int> exitCode; |
- |
- /** |
- * Starts a process running the [executable] with the specified |
- * [arguments]. Returns a [:Future<Process>:] that completes with a |
- * Process instance when the process has been successfully |
- * started. That [Process] object can be used to interact with the |
- * process. If the process cannot be started the returned [Future] |
- * completes with an exception. |
- * |
- * Use [workingDirectory] to set the working directory for the process. Note |
- * that the change of directory occurs before executing the process on some |
- * platforms, which may have impact when using relative paths for the |
- * executable and the arguments. |
- * |
- * Use [environment] to set the environment variables for the process. If not |
- * set the environment of the parent process is inherited. Currently, only |
- * US-ASCII environment variables are supported and errors are likely to occur |
- * if an environment variable with code-points outside the US-ASCII range is |
- * passed in. |
- * |
- * If [includeParentEnvironment] is `true`, the process's environment will |
- * include the parent process's environment, with [environment] taking |
- * precedence. Default is `true`. |
- * |
- * If [runInShell] is `true`, the process will be spawned through a system |
- * shell. On Linux and OS X, [:/bin/sh:] is used, while |
- * [:%WINDIR%\system32\cmd.exe:] is used on Windows. |
- * |
- * Users must read all data coming on the [stdout] and [stderr] |
- * streams of processes started with [:Process.start:]. If the user |
- * does not read all data on the streams the underlying system |
- * resources will not be released since there is still pending data. |
- * |
- * The following code uses `Process.start` to grep for `main` in the |
- * file `test.dart` on Linux. |
- * |
- * Process.start('grep', ['-i', 'main', 'test.dart']).then((process) { |
- * stdout.addStream(process.stdout); |
- * stderr.addStream(process.stderr); |
- * }); |
- * |
- * If [mode] is [ProcessStartMode.NORMAL] (the default) a child |
- * process will be started with `stdin`, `stdout` and `stderr` |
- * connected. |
- * |
- * If `mode` is [ProcessStartMode.DETACHED] a detached process will |
- * be created. A detached process has no connection to its parent, |
- * and can keep running on its own when the parent dies. The only |
- * information available from a detached process is its `pid`. There |
- * is no connection to its `stdin`, `stdout` or `stderr`, nor will |
- * the process' exit code become available when it terminates. |
- * |
- * If `mode` is [ProcessStartMode.DETACHED_WITH_STDIO] a detached |
- * process will be created where the `stdin`, `stdout` and `stderr` |
- * are connected. The creator can communicate with the child through |
- * these. The detached process will keep running even if these |
- * communication channels are closed. The process' exit code will |
- * not become available when it terminated. |
- * |
- * The default value for `mode` is `ProcessStartMode.NORMAL`. |
- */ |
- external static Future<Process> start( |
- String executable, |
- List<String> arguments, |
- {String workingDirectory, |
- Map<String, String> environment, |
- bool includeParentEnvironment: true, |
- bool runInShell: false, |
- ProcessStartMode mode: ProcessStartMode.NORMAL}); |
- |
- /** |
- * Starts a process and runs it non-interactively to completion. The |
- * process run is [executable] with the specified [arguments]. |
- * |
- * Use [workingDirectory] to set the working directory for the process. Note |
- * that the change of directory occurs before executing the process on some |
- * platforms, which may have impact when using relative paths for the |
- * executable and the arguments. |
- * |
- * Use [environment] to set the environment variables for the process. If not |
- * set the environment of the parent process is inherited. Currently, only |
- * US-ASCII environment variables are supported and errors are likely to occur |
- * if an environment variable with code-points outside the US-ASCII range is |
- * passed in. |
- * |
- * If [includeParentEnvironment] is `true`, the process's environment will |
- * include the parent process's environment, with [environment] taking |
- * precedence. Default is `true`. |
- * |
- * If [runInShell] is true, the process will be spawned through a system |
- * shell. On Linux and OS X, `/bin/sh` is used, while |
- * `%WINDIR%\system32\cmd.exe` is used on Windows. |
- * |
- * The encoding used for decoding `stdout` and `stderr` into text is |
- * controlled through [stdoutEncoding] and [stderrEncoding]. The |
- * default encoding is [SYSTEM_ENCODING]. If `null` is used no |
- * decoding will happen and the [ProcessResult] will hold binary |
- * data. |
- * |
- * Returns a `Future<ProcessResult>` that completes with the |
- * result of running the process, i.e., exit code, standard out and |
- * standard in. |
- * |
- * The following code uses `Process.run` to grep for `main` in the |
- * file `test.dart` on Linux. |
- * |
- * Process.run('grep', ['-i', 'main', 'test.dart']).then((result) { |
- * stdout.write(result.stdout); |
- * stderr.write(result.stderr); |
- * }); |
- */ |
- external static Future<ProcessResult> run( |
- String executable, |
- List<String> arguments, |
- {String workingDirectory, |
- Map<String, String> environment, |
- bool includeParentEnvironment: true, |
- bool runInShell: false, |
- Encoding stdoutEncoding: SYSTEM_ENCODING, |
- Encoding stderrEncoding: SYSTEM_ENCODING}); |
- |
- |
- /** |
- * Starts a process and runs it to completion. This is a synchronous |
- * call and will block until the child process terminates. |
- * |
- * The arguments are the same as for `Process.run`. |
- * |
- * Returns a `ProcessResult` with the result of running the process, |
- * i.e., exit code, standard out and standard in. |
- */ |
- external static ProcessResult runSync( |
- String executable, |
- List<String> arguments, |
- {String workingDirectory, |
- Map<String, String> environment, |
- bool includeParentEnvironment: true, |
- bool runInShell: false, |
- Encoding stdoutEncoding: SYSTEM_ENCODING, |
- Encoding stderrEncoding: SYSTEM_ENCODING}); |
- |
- /** |
- * Kills the process with id [pid]. |
- * |
- * Where possible, sends the [signal] to the process with id |
- * `pid`. This includes Linux and OS X. The default signal is |
- * [ProcessSignal.SIGTERM] which will normally terminate the |
- * process. |
- * |
- * On platforms without signal support, including Windows, the call |
- * just terminates the process with id `pid` in a platform specific |
- * way, and the `signal` parameter is ignored. |
- * |
- * Returns `true` if the signal is successfully delivered to the |
- * process. Otherwise the signal could not be sent, usually meaning |
- * that the process is already dead. |
- */ |
- external static bool killPid( |
- int pid, [ProcessSignal signal = ProcessSignal.SIGTERM]); |
- |
- /** |
- * Returns the standard output stream of the process as a [:Stream:]. |
- */ |
- Stream<List<int>> get stdout; |
- |
- /** |
- * Returns the standard error stream of the process as a [:Stream:]. |
- */ |
- Stream<List<int>> get stderr; |
- |
- /** |
- * Returns the standard input stream of the process as an [IOSink]. |
- */ |
- IOSink get stdin; |
- |
- /** |
- * Returns the process id of the process. |
- */ |
- int get pid; |
- |
- /** |
- * Kills the process. |
- * |
- * Where possible, sends the [signal] to the process. This includes |
- * Linux and OS X. The default signal is [ProcessSignal.SIGTERM] |
- * which will normally terminate the process. |
- * |
- * On platforms without signal support, including Windows, the call |
- * just terminates the process in a platform specific way, and the |
- * `signal` parameter is ignored. |
- * |
- * Returns `true` if the signal is successfully delivered to the |
- * process. Otherwise the signal could not be sent, usually meaning |
- * that the process is already dead. |
- */ |
- bool kill([ProcessSignal signal = ProcessSignal.SIGTERM]); |
-} |
- |
- |
-/** |
- * [ProcessResult] represents the result of running a non-interactive |
- * process started with [Process.run] or [Process.runSync]. |
- */ |
-class ProcessResult { |
- /** |
- * Exit code for the process. |
- * |
- * See [Process.exitCode] for more information in the exit code |
- * value. |
- */ |
- final int exitCode; |
- |
- /** |
- * Standard output from the process. The value used for the |
- * `stdoutEncoding` argument to `Process.run` determines the type. If |
- * `null` was used this value is of type `List<int> otherwise it is |
- * of type `String`. |
- */ |
- final stdout; |
- |
- /** |
- * Standard error from the process. The value used for the |
- * `stderrEncoding` argument to `Process.run` determines the type. If |
- * `null` was used this value is of type `List<int> |
- * otherwise it is of type `String`. |
- */ |
- final stderr; |
- |
- /** |
- * Process id of the process. |
- */ |
- final int pid; |
- |
- ProcessResult(this.pid, this.exitCode, this.stdout, this.stderr); |
-} |
- |
- |
-/** |
- * On Posix systems, [ProcessSignal] is used to send a specific signal |
- * to a child process, see [:Process.kill:]. |
- * |
- * Some [ProcessSignal]s can also be watched, as a way to intercept the default |
- * signal handler and implement another. See [ProcessSignal.watch] for more |
- * information. |
- */ |
-class ProcessSignal { |
- static const ProcessSignal SIGHUP = const ProcessSignal._(1, "SIGHUP"); |
- static const ProcessSignal SIGINT = const ProcessSignal._(2, "SIGINT"); |
- static const ProcessSignal SIGQUIT = const ProcessSignal._(3, "SIGQUIT"); |
- static const ProcessSignal SIGILL = const ProcessSignal._(4, "SIGILL"); |
- static const ProcessSignal SIGTRAP = const ProcessSignal._(5, "SIGTRAP"); |
- static const ProcessSignal SIGABRT = const ProcessSignal._(6, "SIGABRT"); |
- static const ProcessSignal SIGBUS = const ProcessSignal._(7, "SIGBUS"); |
- static const ProcessSignal SIGFPE = const ProcessSignal._(8, "SIGFPE"); |
- static const ProcessSignal SIGKILL = const ProcessSignal._(9, "SIGKILL"); |
- static const ProcessSignal SIGUSR1 = const ProcessSignal._(10, "SIGUSR1"); |
- static const ProcessSignal SIGSEGV = const ProcessSignal._(11, "SIGSEGV"); |
- static const ProcessSignal SIGUSR2 = const ProcessSignal._(12, "SIGUSR2"); |
- static const ProcessSignal SIGPIPE = const ProcessSignal._(13, "SIGPIPE"); |
- static const ProcessSignal SIGALRM = const ProcessSignal._(14, "SIGALRM"); |
- static const ProcessSignal SIGTERM = const ProcessSignal._(15, "SIGTERM"); |
- static const ProcessSignal SIGCHLD = const ProcessSignal._(17, "SIGCHLD"); |
- static const ProcessSignal SIGCONT = const ProcessSignal._(18, "SIGCONT"); |
- static const ProcessSignal SIGSTOP = const ProcessSignal._(19, "SIGSTOP"); |
- static const ProcessSignal SIGTSTP = const ProcessSignal._(20, "SIGTSTP"); |
- static const ProcessSignal SIGTTIN = const ProcessSignal._(21, "SIGTTIN"); |
- static const ProcessSignal SIGTTOU = const ProcessSignal._(22, "SIGTTOU"); |
- static const ProcessSignal SIGURG = const ProcessSignal._(23, "SIGURG"); |
- static const ProcessSignal SIGXCPU = const ProcessSignal._(24, "SIGXCPU"); |
- static const ProcessSignal SIGXFSZ = const ProcessSignal._(25, "SIGXFSZ"); |
- static const ProcessSignal SIGVTALRM = const ProcessSignal._(26, "SIGVTALRM"); |
- static const ProcessSignal SIGPROF = const ProcessSignal._(27, "SIGPROF"); |
- static const ProcessSignal SIGWINCH = const ProcessSignal._(28, "SIGWINCH"); |
- static const ProcessSignal SIGPOLL = const ProcessSignal._(29, "SIGPOLL"); |
- static const ProcessSignal SIGSYS = const ProcessSignal._(31, "SIGSYS"); |
- |
- final int _signalNumber; |
- final String _name; |
- |
- const ProcessSignal._(this._signalNumber, this._name); |
- |
- String toString() => _name; |
- |
- /** |
- * Watch for process signals. |
- * |
- * The following [ProcessSignal]s can be listened to: |
- * |
- * * [ProcessSignal.SIGHUP]. |
- * * [ProcessSignal.SIGINT]. Signal sent by e.g. CTRL-C. |
- * * [ProcessSignal.SIGTERM]. Not available on Windows. |
- * * [ProcessSignal.SIGUSR1]. Not available on Windows. |
- * * [ProcessSignal.SIGUSR2]. Not available on Windows. |
- * * [ProcessSignal.SIGWINCH]. Not available on Windows. |
- * |
- * Other signals are disallowed, as they may be used by the VM. |
- * |
- * A signal can be watched multiple times, from multiple isolates, where all |
- * callbacks are invoked when signaled, in no specific order. |
- */ |
- Stream<ProcessSignal> watch() => _ProcessUtils._watchSignal(this); |
-} |
- |
- |
-class SignalException implements IOException { |
- final String message; |
- final osError; |
- |
- const SignalException(this.message, [this.osError = null]); |
- |
- String toString() { |
- var msg = ""; |
- if (osError != null) { |
- msg = ", osError: $osError"; |
- } |
- return "SignalException: $message$msg"; |
- } |
-} |
- |
- |
-class ProcessException implements IOException { |
- /** |
- * Contains the executable provided for the process. |
- */ |
- final String executable; |
- |
- /** |
- * Contains the arguments provided for the process. |
- */ |
- final List<String> arguments; |
- |
- /** |
- * Contains the system message for the process exception if any. |
- */ |
- final String message; |
- |
- /** |
- * Contains the OS error code for the process exception if any. |
- */ |
- final int errorCode; |
- |
- const ProcessException(this.executable, this.arguments, [this.message = "", |
- this.errorCode = 0]); |
- String toString() { |
- var msg = (message == null) ? 'OS error code: $errorCode' : message; |
- var args = arguments.join(' '); |
- return "ProcessException: $msg\n Command: $executable $args"; |
- } |
-} |