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

Unified Diff: sdk/lib/io/directory_impl.dart

Issue 11364097: Allow Directory.create to create all missing path components. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Reupload Created 8 years, 1 month 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: 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);
}
« no previous file with comments | « sdk/lib/io/directory.dart ('k') | sdk/lib/io/path_impl.dart » ('j') | sdk/lib/io/path_impl.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698