| Index: sdk/lib/io/directory_impl.dart
|
| diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
|
| index cbfa9450dd2cb6bb53e1d8f5eca43030ec412ee2..85968f16b6f291410784452f017161b3e6a56604 100644
|
| --- a/sdk/lib/io/directory_impl.dart
|
| +++ b/sdk/lib/io/directory_impl.dart
|
| @@ -51,7 +51,31 @@ class _Directory implements Directory {
|
| return (result == 1);
|
| }
|
|
|
| - Future<Directory> create() {
|
| + Future<Directory> createRecursively() {
|
| + if (_path is !String) {
|
| + throw new ArgumentError();
|
| + }
|
| + var path = new Path.fromNative(_path);
|
| + var current = new Path(path.isAbsolute ? '/' : '');
|
| + var future = null;
|
| + for (var segment in path.segments()) {
|
| + var next = current.append(segment);
|
| + if (future == null) {
|
| + future = new Directory.fromPath(current).create();
|
| + } else {
|
| + future = future.chain((_) => new Directory.fromPath(next).create());
|
| + }
|
| + current = next;
|
| + }
|
| + if (future == null) {
|
| + return new Future.immediate(this);
|
| + } else {
|
| + return future.transform((result) => this);
|
| + }
|
| + }
|
| +
|
| + Future<Directory> create({recursive: false}) {
|
| + if (recursive) return createRecursively();
|
| _ensureDirectoryService();
|
| List request = new List(2);
|
| request[0] = CREATE_REQUEST;
|
| @@ -64,10 +88,20 @@ class _Directory implements Directory {
|
| });
|
| }
|
|
|
| - void createSync() {
|
| + void createRecursivelySync() {
|
| + var path = new Path.fromNative(_path);
|
| + var current = new Path(path.isAbsolute ? '/' : '');
|
| + for (var segment in path.segments()) {
|
| + current = current.append(segment);
|
| + new Directory.fromPath(current).createSync();
|
| + }
|
| + }
|
| +
|
| + void createSync({recursive: false}) {
|
| if (_path is !String) {
|
| throw new ArgumentError();
|
| }
|
| + if (recursive) return createRecursivelySync();
|
| var result = _create(_path);
|
| if (result is OSError) {
|
| throw new DirectoryIOException("Creation failed", _path, result);
|
| @@ -102,6 +136,9 @@ class _Directory implements Directory {
|
| }
|
|
|
| Future<Directory> _deleteHelper(bool recursive, String errorMsg) {
|
| + }
|
| +
|
| + Future<Directory> delete({recursive: false}) {
|
| _ensureDirectoryService();
|
| List request = new List(3);
|
| request[0] = DELETE_REQUEST;
|
| @@ -109,35 +146,17 @@ class _Directory implements Directory {
|
| request[2] = recursive;
|
| return _directoryService.call(request).transform((response) {
|
| if (_isErrorResponse(response)) {
|
| - throw _exceptionOrErrorFromResponse(response, errorMsg);
|
| + throw _exceptionOrErrorFromResponse(response, "Deletion failed");
|
| }
|
| return this;
|
| });
|
| }
|
|
|
| - 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() {
|
| + void deleteSync({recursive: false}) {
|
| if (_path is !String) {
|
| throw new ArgumentError();
|
| }
|
| - var result = _delete(_path, true);
|
| + var result = _delete(_path, recursive);
|
| if (result is OSError) {
|
| throw new DirectoryIOException("Deletion failed", _path, result);
|
| }
|
|
|