OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 part of dart.io; | 5 part of dart.io; |
6 | 6 |
7 class _Directory extends FileSystemEntity implements Directory { | 7 class _Directory extends FileSystemEntity implements Directory { |
8 final String path; | 8 final String path; |
9 | 9 |
10 _Directory(String this.path) { | 10 _Directory(String this.path) { |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 }); | 83 }); |
84 } | 84 } |
85 } | 85 } |
86 if (future == null) { | 86 if (future == null) { |
87 return new Future.value(notFound); | 87 return new Future.value(notFound); |
88 } else { | 88 } else { |
89 return future; | 89 return future; |
90 } | 90 } |
91 } | 91 } |
92 | 92 |
93 Future<Directory> createRecursively() { | 93 Future<Directory> create({bool recursive: false}) { |
94 var dirsToCreate = []; | 94 if (recursive) { |
95 var dir = this; | 95 return exists().then((exists) { |
96 while (dir.path != dir.parent.path) { | 96 if (exists) return this; |
97 dirsToCreate.add(dir); | 97 if (path != parent.path) { |
98 dir = dir.parent; | 98 return parent.create(recursive: true).then((_) { |
99 } | 99 return create(); |
100 return _computeExistingIndex(dirsToCreate).then((index) { | 100 }); |
101 var future; | |
102 for (var i = index - 1; i >= 0 ; i--) { | |
103 if (future == null) { | |
104 future = dirsToCreate[i].create(); | |
105 } else { | 101 } else { |
106 future = future.then((_) { | 102 return create(); |
107 return dirsToCreate[i].create(); | |
108 }); | |
109 } | 103 } |
110 } | 104 }); |
111 if (future == null) { | 105 } else { |
112 return new Future.value(this); | 106 return _IOService.dispatch(_DIRECTORY_CREATE, [path]).then((response) { |
113 } else { | 107 if (_isErrorResponse(response)) { |
114 return future.then((_) => this); | 108 throw _exceptionOrErrorFromResponse(response, "Creation failed"); |
115 } | 109 } |
116 }); | 110 return this; |
117 } | 111 }); |
118 | |
119 Future<Directory> create({bool recursive: false}) { | |
120 if (recursive) return createRecursively(); | |
121 return _IOService.dispatch(_DIRECTORY_CREATE, [path]).then((response) { | |
122 if (_isErrorResponse(response)) { | |
123 throw _exceptionOrErrorFromResponse(response, "Creation failed"); | |
124 } | |
125 return this; | |
126 }); | |
127 } | |
128 | |
129 void createRecursivelySync() { | |
130 var dir = this; | |
131 var dirsToCreate = []; | |
132 while (dir.path != dir.parent.path) { | |
133 if (dir.existsSync()) break; | |
134 dirsToCreate.add(dir); | |
135 dir = dir.parent; | |
136 } | |
137 for (var i = dirsToCreate.length - 1; i >= 0; i--) { | |
138 dirsToCreate[i].createSync(); | |
139 } | 112 } |
140 } | 113 } |
141 | 114 |
142 void createSync({bool recursive: false}) { | 115 void createSync({bool recursive: false}) { |
143 if (recursive) return createRecursivelySync(); | 116 if (recursive) { |
| 117 if (existsSync()) return; |
| 118 if (path != parent.path) { |
| 119 parent.createSync(recursive: true); |
| 120 } |
| 121 } |
144 var result = _create(path); | 122 var result = _create(path); |
145 if (result is OSError) { | 123 if (result is OSError) { |
146 throw new FileSystemException("Creation failed", path, result); | 124 throw new FileSystemException("Creation failed", path, result); |
147 } | 125 } |
148 } | 126 } |
149 | 127 |
150 static Directory get systemTemp => new Directory(_systemTemp()); | 128 static Directory get systemTemp => new Directory(_systemTemp()); |
151 | 129 |
152 Future<Directory> createTemp([String prefix]) { | 130 Future<Directory> createTemp([String prefix]) { |
153 if (prefix == null) prefix = ''; | 131 if (prefix == null) prefix = ''; |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
402 controller.addError( | 380 controller.addError( |
403 new FileSystemException("Directory listing failed", | 381 new FileSystemException("Directory listing failed", |
404 errorPath, | 382 errorPath, |
405 err)); | 383 err)); |
406 } else { | 384 } else { |
407 controller.addError( | 385 controller.addError( |
408 new FileSystemException("Internal error")); | 386 new FileSystemException("Internal error")); |
409 } | 387 } |
410 } | 388 } |
411 } | 389 } |
OLD | NEW |