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

Unified Diff: runtime/bin/directory_impl.dart

Issue 11337019: Use patching for dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 2 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/directory_impl.dart
diff --git a/runtime/bin/directory_impl.dart b/runtime/bin/directory_impl.dart
deleted file mode 100644
index f4b43f1908268c1ed633b86db8b946c520e8c6fb..0000000000000000000000000000000000000000
--- a/runtime/bin/directory_impl.dart
+++ /dev/null
@@ -1,294 +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.
-
-
-class _Directory implements Directory {
- static const CREATE_REQUEST = 0;
- static const DELETE_REQUEST = 1;
- static const EXISTS_REQUEST = 2;
- static const CREATE_TEMP_REQUEST = 3;
- static const LIST_REQUEST = 4;
- static const RENAME_REQUEST = 5;
-
- static const SUCCESS_RESPONSE = 0;
- static const ILLEGAL_ARGUMENT_RESPONSE = 1;
- static const OSERROR_RESPONSE = 2;
-
- _Directory(String this._path);
- _Directory.fromPath(Path path) : this(path.toNativePath());
- _Directory.current() : this(_current());
-
- static String _current() native "Directory_Current";
- static _createTemp(String template) native "Directory_CreateTemp";
- static int _exists(String path) native "Directory_Exists";
- static _create(String path) native "Directory_Create";
- static _delete(String path, bool recursive) native "Directory_Delete";
- static _rename(String path, String newPath) native "Directory_Rename";
- static SendPort _newServicePort() native "Directory_NewServicePort";
-
- Future<bool> exists() {
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = EXISTS_REQUEST;
- request[1] = _path;
- return _directoryService.call(request).transform((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionFromResponse(response, "Exists failed");
- }
- return response == 1;
- });
- }
-
- bool existsSync() {
- if (_path is !String) {
- throw new ArgumentError();
- }
- var result = _exists(_path);
- if (result is OSError) {
- throw new DirectoryIOException("Exists failed", _path, result);
- }
- return (result == 1);
- }
-
- Future<Directory> create() {
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = CREATE_REQUEST;
- request[1] = _path;
- return _directoryService.call(request).transform((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionFromResponse(response, "Creation failed");
- }
- return this;
- });
- }
-
- void createSync() {
- if (_path is !String) {
- throw new ArgumentError();
- }
- var result = _create(_path);
- if (result is OSError) {
- throw new DirectoryIOException("Creation failed", _path, result);
- }
- }
-
- Future<Directory> createTemp() {
- _ensureDirectoryService();
- List request = new List(2);
- request[0] = CREATE_TEMP_REQUEST;
- request[1] = _path;
- return _directoryService.call(request).transform((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionFromResponse(response,
- "Creation of temporary directory failed");
- }
- return new Directory(response);
- });
- }
-
- Directory createTempSync() {
- if (_path is !String) {
- throw new ArgumentError();
- }
- var result = _createTemp(path);
- if (result is OSError) {
- throw new DirectoryIOException("Creation of temporary directory failed",
- _path,
- result);
- }
- return new Directory(result);
- }
-
- Future<Directory> _deleteHelper(bool recursive, String errorMsg) {
- _ensureDirectoryService();
- List request = new List(3);
- request[0] = DELETE_REQUEST;
- request[1] = _path;
- request[2] = recursive;
- return _directoryService.call(request).transform((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionFromResponse(response, errorMsg);
- }
- return this;
- });
- return completer.future;
- }
-
- Future<Directory> delete() {
- return _deleteHelper(false, "Deletion failed");
- }
-
- void deleteSync() {
- if (_path is !String) {
- throw new ArgumentError();
- }
- var result = _delete(_path, false);
- if (result is OSError) {
- throw new DirectoryIOException("Deletion failed", _path, result);
- }
- }
-
- Future<Directory> deleteRecursively() {
- return _deleteHelper(true, "Deletion failed");
- }
-
- void deleteRecursivelySync() {
- if (_path is !String) {
- throw new ArgumentError();
- }
- var result = _delete(_path, true);
- if (result is OSError) {
- throw new DirectoryIOException("Deletion failed", _path, result);
- }
- }
-
- Future<Directory> rename(String newPath) {
- _ensureDirectoryService();
- List request = new List(3);
- request[0] = RENAME_REQUEST;
- request[1] = _path;
- request[2] = newPath;
- return _directoryService.call(request).transform((response) {
- if (_isErrorResponse(response)) {
- throw _exceptionFromResponse(response, "Rename failed");
- }
- return new Directory(newPath);
- });
- }
-
- Directory renameSync(String newPath) {
- if (_path is !String || newPath is !String) {
- throw new ArgumentError();
- }
- var result = _rename(_path, newPath);
- if (result is OSError) {
- throw new DirectoryIOException("Rename failed", _path, result);
- }
- return new Directory(newPath);
- }
-
- DirectoryLister list({bool recursive: false}) {
- return new _DirectoryLister(_path, recursive);
- }
-
- String get path { return _path; }
-
- bool _isErrorResponse(response) {
- return response is List && response[0] != _SUCCESS_RESPONSE;
- }
-
- Exception _exceptionFromResponse(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 DirectoryIOException(message, _path, err);
- default:
- return new Exception("Unknown error");
- }
- }
-
- void _ensureDirectoryService() {
- if (_directoryService == null) {
- _directoryService = _newServicePort();
- }
- }
-
- final String _path;
- SendPort _directoryService;
-}
-
-class _DirectoryLister implements DirectoryLister {
- _DirectoryLister(String path, bool recursive) {
- const int LIST_DIRECTORY = 0;
- const int LIST_FILE = 1;
- const int LIST_ERROR = 2;
- const int LIST_DONE = 3;
-
- final int RESPONSE_TYPE = 0;
- final int RESPONSE_PATH = 1;
- final int RESPONSE_COMPLETE = 1;
- final int RESPONSE_ERROR = 2;
-
- List request = new List(3);
- request[0] = _Directory.LIST_REQUEST;
- request[1] = path;
- request[2] = recursive;
- ReceivePort responsePort = new ReceivePort();
- // Use a separate directory service port for each listing as
- // listing operations on the same directory can run in parallel.
- _Directory._newServicePort().send(request, responsePort.toSendPort());
- responsePort.receive((message, replyTo) {
- if (message is !List || message[RESPONSE_TYPE] is !int) {
- responsePort.close();
- _reportError(new DirectoryIOException("Internal error"));
- return;
- }
- switch (message[RESPONSE_TYPE]) {
- case LIST_DIRECTORY:
- if (_onDir != null) _onDir(message[RESPONSE_PATH]);
- break;
- case LIST_FILE:
- if (_onFile != null) _onFile(message[RESPONSE_PATH]);
- break;
- case LIST_ERROR:
- var errorType =
- message[RESPONSE_ERROR][_ERROR_RESPONSE_ERROR_TYPE];
- if (errorType == _ILLEGAL_ARGUMENT_RESPONSE) {
- _reportError(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;
- _reportError(new DirectoryIOException("Directory listing failed",
- errorPath,
- err));
- } else {
- _reportError(new DirectoryIOException("Internal error"));
- }
- break;
- case LIST_DONE:
- responsePort.close();
- if (_onDone != null) _onDone(message[RESPONSE_COMPLETE]);
- break;
- }
- });
- }
-
- void set onDir(void onDir(String dir)) {
- _onDir = onDir;
- }
-
- void set onFile(void onFile(String file)) {
- _onFile = onFile;
- }
-
- void set onDone(void onDone(bool completed)) {
- _onDone = onDone;
- }
-
- void set onError(void onError(e)) {
- _onError = onError;
- }
-
- void _reportError(e) {
- if (_onError != null) {
- _onError(e);
- } else {
- throw e;
- }
- }
-
- Function _onDir;
- Function _onFile;
- Function _onDone;
- Function _onError;
-}

Powered by Google App Engine
This is Rietveld 408576698