| Index: utils/testrunner/pipeline_utils.dart
|
| diff --git a/utils/testrunner/pipeline_utils.dart b/utils/testrunner/pipeline_utils.dart
|
| deleted file mode 100644
|
| index 38ed392286fa897e5ee0f4c4c07c57929ca23f3f..0000000000000000000000000000000000000000
|
| --- a/utils/testrunner/pipeline_utils.dart
|
| +++ /dev/null
|
| @@ -1,212 +0,0 @@
|
| -// Copyright (c) 2012, 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 pipeline;
|
| -
|
| -List log;
|
| -var replyPort;
|
| -int _procId = 1;
|
| -Map _procs = {};
|
| -
|
| -/**
|
| - * Create a file path for a temporary file. The file will be in the
|
| - * [tmpDir] directory, with name [basis], but with any extension
|
| - * stripped and replaced by [suffix].
|
| - */
|
| -String createTempName(String tmpDir, String basis, [String suffix='']) {
|
| - var p = new Path(basis);
|
| - return '$tmpDir${Platform.pathSeparator}'
|
| - '${p.filenameWithoutExtension}${suffix}';
|
| -}
|
| -
|
| -/**
|
| - * Given a file path [file], make it absolute if it is relative,
|
| - * and return the result as a [Path].
|
| - */
|
| -Path getAbsolutePath(String file) {
|
| - var p = new Path(file).canonicalize();
|
| - if (p.isAbsolute) {
|
| - return p;
|
| - } else {
|
| - var cwd = new Path(Directory.current.path);
|
| - return cwd.join(p);
|
| - }
|
| -}
|
| -
|
| -/** Get the directory that contains a [file]. */
|
| -String getDirectory(String file) =>
|
| - getAbsolutePath(file).directoryPath.toString();
|
| -
|
| -/** Create a file [fileName] and populate it with [contents]. */
|
| -void writeFile(String fileName, String contents) {
|
| - var file = new File(fileName);
|
| - file.writeAsStringSync(contents);
|
| -}
|
| -
|
| -/*
|
| - * Run an external process [cmd] with command line arguments [args].
|
| - * [timeout] can be used to forcefully terminate the process after
|
| - * some number of seconds. This is used by runCommand and startProcess.
|
| - * If [procId] is non-zero (i.e. called from startProcess) then a reference
|
| - * to the [Process] will be put in a map with key [procId]; in this case
|
| - * the process can be terminated later by calling [stopProcess] and
|
| - * passing in the [procId].
|
| - * [outputMonitor] is an optional function that will be called back with each
|
| - * line of output from the process.
|
| - * Returns a [Future] for when the process terminates.
|
| - */
|
| -Future _processHelper(String command, List<String> args,
|
| - List stdout, List stderr,
|
| - [int timeout = 30, int procId = 0, Function outputMonitor]) {
|
| - var timer = null;
|
| - if (Platform.operatingSystem == 'windows' && command.endsWith('.bat')) {
|
| - var oldArgs = args;
|
| - args = new List();
|
| - args.add('/c');
|
| - // TODO(gram): We may need some escaping here if any of the
|
| - // components contain spaces.
|
| - args.add("$command ${oldArgs.join(' ')}");
|
| - command='cmd.exe';
|
| - }
|
| - log.add('Running $command ${args.join(" ")}');
|
| -
|
| - return Process.start(command, args)
|
| - .then((process) {
|
| - _procs[procId.toString()] = process;
|
| -
|
| - var stdoutFuture = _pipeStream(process.stdout, stdout, outputMonitor);
|
| - var stderrFuture = _pipeStream(process.stderr, stderr, outputMonitor);
|
| -
|
| - timer = new Timer(new Duration(seconds: timeout), () {
|
| - timer = null;
|
| - process.kill();
|
| - });
|
| - return Future.wait([process.exitCode, stdoutFuture, stderrFuture])
|
| - .then((values) {
|
| - if (timer != null) {
|
| - timer.cancel();
|
| - }
|
| - return values[0];
|
| - });
|
| - })
|
| - .catchError((e) {
|
| - stderr.add("Error starting process:");
|
| - stderr.add(" Command: $command");
|
| - stderr.add(" Error: ${e.toString()}");
|
| - return new Future.value(-1);
|
| - });
|
| -}
|
| -
|
| -Future _pipeStream(Stream stream, List<String> destination,
|
| - Function outputMonitor) {
|
| - return stream
|
| - .transform(UTF8.decoder)
|
| - .transform(new LineTransformer())
|
| - .listen((String line) {
|
| - if (config["immediate"] && line.startsWith('###')) {
|
| - print(line.substring(3));
|
| - }
|
| - if (outputMonitor != null) {
|
| - outputMonitor(line);
|
| - }
|
| - destination.add(line);
|
| - })
|
| - .asFuture();
|
| -}
|
| -
|
| -/**
|
| - * Run an external process [cmd] with command line arguments [args].
|
| - * [timeout] can be used to forcefully terminate the process after
|
| - * some number of seconds.
|
| - * Returns a [Future] for when the process terminates.
|
| - */
|
| -Future runCommand(String command, List<String> args,
|
| - List stdout, List stderr,
|
| - [int timeout = 30, Function outputMonitor]) {
|
| - return _processHelper(command, args, stdout, stderr,
|
| - timeout, 0, outputMonitor);
|
| -}
|
| -
|
| -/**
|
| - * Start an external process [cmd] with command line arguments [args].
|
| - * Returns an ID by which it can later be stopped.
|
| - */
|
| -int startProcess(String command, List<String> args, List stdout, List stderr,
|
| - [Function outputMonitor]) {
|
| - int id = _procId++;
|
| - var f = _processHelper(command, args, stdout, stderr, 3000, id,
|
| - outputMonitor);
|
| - if (f != null) {
|
| - f.then((e) {
|
| - _procs.remove(id.toString());
|
| - });
|
| - }
|
| - return id;
|
| -}
|
| -
|
| -/** Checks if a process is still running. */
|
| -bool isProcessRunning(int id) {
|
| - return _procs.containsKey(id.toString());
|
| -}
|
| -
|
| -/**
|
| - * Stop a process previously started with [startProcess] or [runCommand],
|
| - * given the id string.
|
| - */
|
| -void stopProcess(int id) {
|
| - var sid = id.toString();
|
| - if (_procs.containsKey(sid)) {
|
| - Process p = _procs.remove(sid);
|
| - p.kill();
|
| - }
|
| -}
|
| -
|
| -/** Delete a file named [fname] if it exists. */
|
| -bool cleanup(String fname) {
|
| - if (fname != null && config['clean-files']) {
|
| - var f = new File(fname);
|
| - try {
|
| - if (f.existsSync()) {
|
| - logMessage('Removing $fname');
|
| - f.deleteSync();
|
| - }
|
| - } catch (e) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -/** Delete a directory named [dname] if it exists. */
|
| -bool cleanupDir(String dname) {
|
| - if (dname != null && config['clean-files']) {
|
| - var d = new Directory(dname);
|
| - try {
|
| - if (d.existsSync()) {
|
| - logMessage('Removing $dname');
|
| - d.deleteSync(recursive: true);
|
| - }
|
| - } catch (e) {
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -initPipeline(port) {
|
| - replyPort = port;
|
| - stdout = new List();
|
| - stderr = new List();
|
| - log = new List();
|
| -}
|
| -
|
| -void completePipeline(List stdout, List stderr, [exitCode = 0]) {
|
| - replyPort.send([stdout, stderr, log, exitCode]);
|
| -}
|
| -
|
| -/** Utility function to log diagnostic messages. */
|
| -void logMessage(msg) => log.add(msg);
|
| -
|
| -/** Turn file paths into standard form with forward slashes. */
|
| -String normalizePath(String p) => (new Path(p)).toString();
|
|
|