| Index: pkg/dev_compiler/tool/input_sdk/lib/io/directory_impl.dart
|
| diff --git a/pkg/dev_compiler/tool/input_sdk/lib/io/directory_impl.dart b/pkg/dev_compiler/tool/input_sdk/lib/io/directory_impl.dart
|
| deleted file mode 100644
|
| index 52cf54824ecf4e8ed14a4b5491ade076c4a32471..0000000000000000000000000000000000000000
|
| --- a/pkg/dev_compiler/tool/input_sdk/lib/io/directory_impl.dart
|
| +++ /dev/null
|
| @@ -1,428 +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 dart.io;
|
| -
|
| -class _Directory extends FileSystemEntity implements Directory {
|
| - final String path;
|
| -
|
| - _Directory(this.path) {
|
| - if (path is! String) {
|
| - throw new ArgumentError('${Error.safeToString(path)} '
|
| - 'is not a String');
|
| - }
|
| - }
|
| -
|
| - external static _current();
|
| - external static _setCurrent(path);
|
| - external static _createTemp(String path);
|
| - external static String _systemTemp();
|
| - external static _exists(String path);
|
| - external static _create(String path);
|
| - external static _deleteNative(String path, bool recursive);
|
| - external static _rename(String path, String newPath);
|
| - external static void _fillWithDirectoryListing(
|
| - List<FileSystemEntity> list, String path, bool recursive,
|
| - bool followLinks);
|
| -
|
| - static Directory get current {
|
| - var result = _current();
|
| - if (result is OSError) {
|
| - throw new FileSystemException(
|
| - "Getting current working directory failed", "", result);
|
| - }
|
| - return new _Directory(result);
|
| - }
|
| -
|
| - static void set current(path) {
|
| - if (path is Directory) path = path.path;
|
| - var result = _setCurrent(path);
|
| - if (result is ArgumentError) throw result;
|
| - if (result is OSError) {
|
| - throw new FileSystemException(
|
| - "Setting current working directory failed", path, result);
|
| - }
|
| - }
|
| -
|
| - Uri get uri {
|
| - return new Uri.directory(path);
|
| - }
|
| -
|
| - Future<bool> exists() {
|
| - return _IOService._dispatch(_DIRECTORY_EXISTS, [path]).then((response) {
|
| - if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(response, "Exists failed");
|
| - }
|
| - return response == 1;
|
| - });
|
| - }
|
| -
|
| - bool existsSync() {
|
| - var result = _exists(path);
|
| - if (result is OSError) {
|
| - throw new FileSystemException("Exists failed", path, result);
|
| - }
|
| - return (result == 1);
|
| - }
|
| -
|
| - Directory get absolute => new Directory(_absolutePath);
|
| -
|
| - Future<FileStat> stat() => FileStat.stat(path);
|
| -
|
| - FileStat statSync() => FileStat.statSync(path);
|
| -
|
| - // Compute the index of the first directory in the list that exists. If
|
| - // none of the directories exist dirsToCreate.length is returned.
|
| - Future<int> _computeExistingIndex(List dirsToCreate) {
|
| - var future;
|
| - var notFound = dirsToCreate.length;
|
| - for (var i = 0; i < dirsToCreate.length; i++) {
|
| - if (future == null) {
|
| - future = dirsToCreate[i].exists().then((e) => e ? i : notFound);
|
| - } else {
|
| - future = future.then((index) {
|
| - if (index != notFound) {
|
| - return new Future.value(index);
|
| - }
|
| - return dirsToCreate[i].exists().then((e) => e ? i : notFound);
|
| - });
|
| - }
|
| - }
|
| - if (future == null) {
|
| - return new Future.value(notFound);
|
| - } else {
|
| - return future;
|
| - }
|
| - }
|
| -
|
| - Future<Directory> create({bool recursive: false}) {
|
| - if (recursive) {
|
| - return exists().then((exists) {
|
| - if (exists) return this;
|
| - if (path != parent.path) {
|
| - return parent.create(recursive: true).then((_) {
|
| - return create();
|
| - });
|
| - } else {
|
| - return create();
|
| - }
|
| - });
|
| - } else {
|
| - return _IOService._dispatch(_DIRECTORY_CREATE, [path]).then((response) {
|
| - if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(response, "Creation failed");
|
| - }
|
| - return this;
|
| - });
|
| - }
|
| - }
|
| -
|
| - void createSync({bool recursive: false}) {
|
| - if (recursive) {
|
| - if (existsSync()) return;
|
| - if (path != parent.path) {
|
| - parent.createSync(recursive: true);
|
| - }
|
| - }
|
| - var result = _create(path);
|
| - if (result is OSError) {
|
| - throw new FileSystemException("Creation failed", path, result);
|
| - }
|
| - }
|
| -
|
| - static Directory get systemTemp => new Directory(_systemTemp());
|
| -
|
| - Future<Directory> createTemp([String prefix]) {
|
| - if (prefix == null) prefix = '';
|
| - if (path == '') {
|
| - throw new ArgumentError(
|
| - "Directory.createTemp called with an empty path. "
|
| - "To use the system temp directory, use Directory.systemTemp");
|
| - }
|
| - String fullPrefix;
|
| - if (path.endsWith('/') || (Platform.isWindows && path.endsWith('\\'))) {
|
| - fullPrefix = "$path$prefix";
|
| - } else {
|
| - fullPrefix = "$path${Platform.pathSeparator}$prefix";
|
| - }
|
| - return _IOService._dispatch(_DIRECTORY_CREATE_TEMP, [fullPrefix])
|
| - .then((response) {
|
| - if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(
|
| - response, "Creation of temporary directory failed");
|
| - }
|
| - return new Directory(response);
|
| - });
|
| - }
|
| -
|
| - Directory createTempSync([String prefix]) {
|
| - if (prefix == null) prefix = '';
|
| - if (path == '') {
|
| - throw new ArgumentError(
|
| - "Directory.createTemp called with an empty path. "
|
| - "To use the system temp directory, use Directory.systemTemp");
|
| - }
|
| - String fullPrefix;
|
| - if (path.endsWith('/') || (Platform.isWindows && path.endsWith('\\'))) {
|
| - fullPrefix = "$path$prefix";
|
| - } else {
|
| - fullPrefix = "$path${Platform.pathSeparator}$prefix";
|
| - }
|
| - var result = _createTemp(fullPrefix);
|
| - if (result is OSError) {
|
| - throw new FileSystemException("Creation of temporary directory failed",
|
| - fullPrefix,
|
| - result);
|
| - }
|
| - return new Directory(result);
|
| - }
|
| -
|
| - Future<Directory> _delete({bool recursive: false}) {
|
| - return _IOService._dispatch(_DIRECTORY_DELETE, [path, recursive])
|
| - .then((response) {
|
| - if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(response, "Deletion failed");
|
| - }
|
| - return this;
|
| - });
|
| - }
|
| -
|
| - void _deleteSync({bool recursive: false}) {
|
| - var result = _deleteNative(path, recursive);
|
| - if (result is OSError) {
|
| - throw new FileSystemException("Deletion failed", path, result);
|
| - }
|
| - }
|
| -
|
| - Future<Directory> rename(String newPath) {
|
| - return _IOService._dispatch(_DIRECTORY_RENAME, [path, newPath])
|
| - .then((response) {
|
| - if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(response, "Rename failed");
|
| - }
|
| - return new Directory(newPath);
|
| - });
|
| - }
|
| -
|
| - Directory renameSync(String newPath) {
|
| - if (newPath is !String) {
|
| - throw new ArgumentError();
|
| - }
|
| - var result = _rename(path, newPath);
|
| - if (result is OSError) {
|
| - throw new FileSystemException("Rename failed", path, result);
|
| - }
|
| - return new Directory(newPath);
|
| - }
|
| -
|
| - Stream<FileSystemEntity> list({bool recursive: false,
|
| - bool followLinks: true}) {
|
| - return new _AsyncDirectoryLister(
|
| - FileSystemEntity._ensureTrailingPathSeparators(path),
|
| - recursive,
|
| - followLinks).stream;
|
| - }
|
| -
|
| - List<FileSystemEntity> listSync(
|
| - {bool recursive: false, bool followLinks: true}) {
|
| - if (recursive is! bool || followLinks is! bool) {
|
| - throw new ArgumentError();
|
| - }
|
| - var result = <FileSystemEntity>[];
|
| - _fillWithDirectoryListing(
|
| - result,
|
| - FileSystemEntity._ensureTrailingPathSeparators(path),
|
| - recursive,
|
| - followLinks);
|
| - return result;
|
| - }
|
| -
|
| - String toString() => "Directory: '$path'";
|
| -
|
| - bool _isErrorResponse(response) =>
|
| - response is List && response[0] != _SUCCESS_RESPONSE;
|
| -
|
| - _exceptionOrErrorFromResponse(response, String message) {
|
| - assert(_isErrorResponse(response));
|
| - switch (response[_ERROR_RESPONSE_ERROR_TYPE]) {
|
| - case _ILLEGAL_ARGUMENT_RESPONSE:
|
| - return new ArgumentError();
|
| - case _OSERROR_RESPONSE:
|
| - var err = new OSError(response[_OSERROR_RESPONSE_MESSAGE],
|
| - response[_OSERROR_RESPONSE_ERROR_CODE]);
|
| - return new FileSystemException(message, path, err);
|
| - default:
|
| - return new Exception("Unknown error");
|
| - }
|
| - }
|
| -}
|
| -
|
| -abstract class _AsyncDirectoryListerOps {
|
| - external factory _AsyncDirectoryListerOps(int pointer);
|
| -
|
| - int getPointer();
|
| -}
|
| -
|
| -class _AsyncDirectoryLister {
|
| - static const int LIST_FILE = 0;
|
| - static const int LIST_DIRECTORY = 1;
|
| - static const int LIST_LINK = 2;
|
| - static const int LIST_ERROR = 3;
|
| - static const int LIST_DONE = 4;
|
| -
|
| - static const int RESPONSE_TYPE = 0;
|
| - static const int RESPONSE_PATH = 1;
|
| - static const int RESPONSE_COMPLETE = 1;
|
| - static const int RESPONSE_ERROR = 2;
|
| -
|
| - final String path;
|
| - final bool recursive;
|
| - final bool followLinks;
|
| -
|
| - StreamController controller;
|
| - bool canceled = false;
|
| - bool nextRunning = false;
|
| - bool closed = false;
|
| - _AsyncDirectoryListerOps _ops;
|
| - Completer closeCompleter = new Completer();
|
| -
|
| - _AsyncDirectoryLister(this.path, this.recursive, this.followLinks) {
|
| - controller = new StreamController(onListen: onListen,
|
| - onResume: onResume,
|
| - onCancel: onCancel,
|
| - sync: true);
|
| - }
|
| -
|
| - // Calling this function will increase the reference count on the native
|
| - // object that implements the async directory lister operations. It should
|
| - // only be called to pass the pointer to the IO Service, which will decrement
|
| - // the reference count when it is finished with it.
|
| - int _pointer() {
|
| - return (_ops == null) ? null : _ops.getPointer();
|
| - }
|
| -
|
| - Stream get stream => controller.stream;
|
| -
|
| - void onListen() {
|
| - _IOService._dispatch(_DIRECTORY_LIST_START, [path, recursive, followLinks])
|
| - .then((response) {
|
| - if (response is int) {
|
| - _ops = new _AsyncDirectoryListerOps(response);
|
| - next();
|
| - } else if (response is Error) {
|
| - controller.addError(response, response.stackTrace);
|
| - close();
|
| - } else {
|
| - error(response);
|
| - close();
|
| - }
|
| - });
|
| - }
|
| -
|
| - void onResume() {
|
| - if (!nextRunning) {
|
| - next();
|
| - }
|
| - }
|
| -
|
| - Future onCancel() {
|
| - canceled = true;
|
| - // If we are active, but not requesting, close.
|
| - if (!nextRunning) {
|
| - close();
|
| - }
|
| -
|
| - return closeCompleter.future;
|
| - }
|
| -
|
| - void next() {
|
| - if (canceled) {
|
| - close();
|
| - return;
|
| - }
|
| - if (controller.isPaused || nextRunning) {
|
| - return;
|
| - }
|
| - var pointer = _pointer();
|
| - if (pointer == null) {
|
| - return;
|
| - }
|
| - nextRunning = true;
|
| - _IOService._dispatch(_DIRECTORY_LIST_NEXT, [pointer]).then((result) {
|
| - nextRunning = false;
|
| - if (result is List) {
|
| - next();
|
| - assert(result.length % 2 == 0);
|
| - for (int i = 0; i < result.length; i++) {
|
| - assert(i % 2 == 0);
|
| - switch (result[i++]) {
|
| - case LIST_FILE:
|
| - controller.add(new File(result[i]));
|
| - break;
|
| - case LIST_DIRECTORY:
|
| - controller.add(new Directory(result[i]));
|
| - break;
|
| - case LIST_LINK:
|
| - controller.add(new Link(result[i]));
|
| - break;
|
| - case LIST_ERROR:
|
| - error(result[i]);
|
| - break;
|
| - case LIST_DONE:
|
| - canceled = true;
|
| - return;
|
| - }
|
| - }
|
| - } else {
|
| - controller.addError(new FileSystemException("Internal error"));
|
| - }
|
| - });
|
| - }
|
| -
|
| - void _cleanup() {
|
| - controller.close();
|
| - closeCompleter.complete();
|
| - _ops = null;
|
| - }
|
| -
|
| - void close() {
|
| - if (closed) {
|
| - return;
|
| - }
|
| - if (nextRunning) {
|
| - return;
|
| - }
|
| - closed = true;
|
| -
|
| - var pointer = _pointer();
|
| - if (pointer == null) {
|
| - _cleanup();
|
| - } else {
|
| - _IOService._dispatch(_DIRECTORY_LIST_STOP, [pointer])
|
| - .whenComplete(_cleanup);
|
| - }
|
| - }
|
| -
|
| - void error(message) {
|
| - var errorType =
|
| - message[RESPONSE_ERROR][_ERROR_RESPONSE_ERROR_TYPE];
|
| - if (errorType == _ILLEGAL_ARGUMENT_RESPONSE) {
|
| - controller.addError(new ArgumentError());
|
| - } else if (errorType == _OSERROR_RESPONSE) {
|
| - var responseError = message[RESPONSE_ERROR];
|
| - var err = new OSError(
|
| - responseError[_OSERROR_RESPONSE_MESSAGE],
|
| - responseError[_OSERROR_RESPONSE_ERROR_CODE]);
|
| - var errorPath = message[RESPONSE_PATH];
|
| - if (errorPath == null) errorPath = path;
|
| - controller.addError(
|
| - new FileSystemException("Directory listing failed",
|
| - errorPath,
|
| - err));
|
| - } else {
|
| - controller.addError(
|
| - new FileSystemException("Internal error"));
|
| - }
|
| - }
|
| -}
|
|
|