Chromium Code Reviews| Index: sdk/lib/io/directory_impl.dart |
| diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart |
| index 10b60680019144325834a57456f21dd72aaaffbe..9cbd1b9661d198a52976c78b435e1b8df6e60e04 100644 |
| --- a/sdk/lib/io/directory_impl.dart |
| +++ b/sdk/lib/io/directory_impl.dart |
| @@ -90,57 +90,35 @@ class _Directory extends FileSystemEntity implements Directory { |
| } |
| } |
| - Future<Directory> createRecursively() { |
| - var dirsToCreate = []; |
| - var dir = this; |
| - while (dir.path != dir.parent.path) { |
| - dirsToCreate.add(dir); |
| - dir = dir.parent; |
| - } |
| - return _computeExistingIndex(dirsToCreate).then((index) { |
| - var future; |
| - for (var i = index - 1; i >= 0 ; i--) { |
| - if (future == null) { |
| - future = dirsToCreate[i].create(); |
| - } else { |
| - future = future.then((_) { |
| - return dirsToCreate[i].create(); |
| + Future<Directory> create({bool recursive: false}) { |
|
Anders Johnsen
2013/10/30 16:19:13
Yay, awesome recursion :)
|
| + if (recursive) { |
| + return exists().then((exists) { |
| + if (exists) return this; |
| + if (path != parent.path) { |
|
Anders Johnsen
2013/10/30 16:19:13
Can we start with the path != parent.path, that is
Bill Hesse
2013/10/30 16:51:40
The path != parent.path should almost never be tru
|
| + return parent.create(recursive: true).then((_) { |
| + return create(); |
| }); |
| + } else { |
| + return create(); |
|
Anders Johnsen
2013/10/30 16:19:13
I suppose this will always fail, as this is us try
|
| } |
| - } |
| - if (future == null) { |
| - return new Future.value(this); |
| - } else { |
| - return future.then((_) => this); |
| - } |
| - }); |
| - } |
| - |
| - Future<Directory> create({bool recursive: false}) { |
| - if (recursive) return createRecursively(); |
| - return _IOService.dispatch(_DIRECTORY_CREATE, [path]).then((response) { |
| - if (_isErrorResponse(response)) { |
| - throw _exceptionOrErrorFromResponse(response, "Creation failed"); |
| - } |
| - return this; |
| - }); |
| - } |
| - |
| - void createRecursivelySync() { |
| - var dir = this; |
| - var dirsToCreate = []; |
| - while (dir.path != dir.parent.path) { |
| - if (dir.existsSync()) break; |
| - dirsToCreate.add(dir); |
| - dir = dir.parent; |
| - } |
| - for (var i = dirsToCreate.length - 1; i >= 0; i--) { |
| - dirsToCreate[i].createSync(); |
| + }); |
| + } 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) return createRecursivelySync(); |
| + 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); |