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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 5
6 class _Directory implements Directory { 6 class _Directory implements Directory {
7 static const CREATE_REQUEST = 0; 7 static const CREATE_REQUEST = 0;
8 static const DELETE_REQUEST = 1; 8 static const DELETE_REQUEST = 1;
9 static const EXISTS_REQUEST = 2; 9 static const EXISTS_REQUEST = 2;
10 static const CREATE_TEMP_REQUEST = 3; 10 static const CREATE_TEMP_REQUEST = 3;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 if (_path is !String) { 44 if (_path is !String) {
45 throw new ArgumentError(); 45 throw new ArgumentError();
46 } 46 }
47 var result = _exists(_path); 47 var result = _exists(_path);
48 if (result is OSError) { 48 if (result is OSError) {
49 throw new DirectoryIOException("Exists failed", _path, result); 49 throw new DirectoryIOException("Exists failed", _path, result);
50 } 50 }
51 return (result == 1); 51 return (result == 1);
52 } 52 }
53 53
54 Future<Directory> create() { 54 Future<Directory> createRecursively() {
55 if (_path is !String) {
56 throw new ArgumentError();
57 }
58 var path = new Path.fromNative(_path);
59 var current = new Path(path.isAbsolute ? '/' : '');
60 var future = null;
61 for (var segment in path.segments()) {
62 var next = current.append(segment);
63 if (future == null) {
64 future = new Directory.fromPath(current).create();
65 } else {
66 future = future.chain((_) => new Directory.fromPath(next).create());
67 }
68 current = next;
69 }
70 if (future == null) {
71 return new Future.immediate(this);
72 } else {
73 return future.transform((result) => this);
74 }
75 }
76
77 Future<Directory> create({recursive: false}) {
78 if (recursive) return createRecursively();
55 _ensureDirectoryService(); 79 _ensureDirectoryService();
56 List request = new List(2); 80 List request = new List(2);
57 request[0] = CREATE_REQUEST; 81 request[0] = CREATE_REQUEST;
58 request[1] = _path; 82 request[1] = _path;
59 return _directoryService.call(request).transform((response) { 83 return _directoryService.call(request).transform((response) {
60 if (_isErrorResponse(response)) { 84 if (_isErrorResponse(response)) {
61 throw _exceptionOrErrorFromResponse(response, "Creation failed"); 85 throw _exceptionOrErrorFromResponse(response, "Creation failed");
62 } 86 }
63 return this; 87 return this;
64 }); 88 });
65 } 89 }
66 90
67 void createSync() { 91 void createRecursivelySync() {
92 var path = new Path.fromNative(_path);
93 var current = new Path(path.isAbsolute ? '/' : '');
94 for (var segment in path.segments()) {
95 current = current.append(segment);
96 new Directory.fromPath(current).createSync();
97 }
98 }
99
100 void createSync({recursive: false}) {
68 if (_path is !String) { 101 if (_path is !String) {
69 throw new ArgumentError(); 102 throw new ArgumentError();
70 } 103 }
104 if (recursive) return createRecursivelySync();
71 var result = _create(_path); 105 var result = _create(_path);
72 if (result is OSError) { 106 if (result is OSError) {
73 throw new DirectoryIOException("Creation failed", _path, result); 107 throw new DirectoryIOException("Creation failed", _path, result);
74 } 108 }
75 } 109 }
76 110
77 Future<Directory> createTemp() { 111 Future<Directory> createTemp() {
78 _ensureDirectoryService(); 112 _ensureDirectoryService();
79 List request = new List(2); 113 List request = new List(2);
80 request[0] = CREATE_TEMP_REQUEST; 114 request[0] = CREATE_TEMP_REQUEST;
(...skipping 14 matching lines...) Expand all
95 var result = _createTemp(path); 129 var result = _createTemp(path);
96 if (result is OSError) { 130 if (result is OSError) {
97 throw new DirectoryIOException("Creation of temporary directory failed", 131 throw new DirectoryIOException("Creation of temporary directory failed",
98 _path, 132 _path,
99 result); 133 result);
100 } 134 }
101 return new Directory(result); 135 return new Directory(result);
102 } 136 }
103 137
104 Future<Directory> _deleteHelper(bool recursive, String errorMsg) { 138 Future<Directory> _deleteHelper(bool recursive, String errorMsg) {
139 }
140
141 Future<Directory> delete({recursive: false}) {
105 _ensureDirectoryService(); 142 _ensureDirectoryService();
106 List request = new List(3); 143 List request = new List(3);
107 request[0] = DELETE_REQUEST; 144 request[0] = DELETE_REQUEST;
108 request[1] = _path; 145 request[1] = _path;
109 request[2] = recursive; 146 request[2] = recursive;
110 return _directoryService.call(request).transform((response) { 147 return _directoryService.call(request).transform((response) {
111 if (_isErrorResponse(response)) { 148 if (_isErrorResponse(response)) {
112 throw _exceptionOrErrorFromResponse(response, errorMsg); 149 throw _exceptionOrErrorFromResponse(response, "Deletion failed");
113 } 150 }
114 return this; 151 return this;
115 }); 152 });
116 } 153 }
117 154
118 Future<Directory> delete() { 155 void deleteSync({recursive: false}) {
119 return _deleteHelper(false, "Deletion failed");
120 }
121
122 void deleteSync() {
123 if (_path is !String) { 156 if (_path is !String) {
124 throw new ArgumentError(); 157 throw new ArgumentError();
125 } 158 }
126 var result = _delete(_path, false); 159 var result = _delete(_path, recursive);
127 if (result is OSError) { 160 if (result is OSError) {
128 throw new DirectoryIOException("Deletion failed", _path, result); 161 throw new DirectoryIOException("Deletion failed", _path, result);
129 } 162 }
130 }
131
132 Future<Directory> deleteRecursively() {
133 return _deleteHelper(true, "Deletion failed");
134 }
135
136 void deleteRecursivelySync() {
137 if (_path is !String) {
138 throw new ArgumentError();
139 }
140 var result = _delete(_path, true);
141 if (result is OSError) {
142 throw new DirectoryIOException("Deletion failed", _path, result);
143 }
144 } 163 }
145 164
146 Future<Directory> rename(String newPath) { 165 Future<Directory> rename(String newPath) {
147 _ensureDirectoryService(); 166 _ensureDirectoryService();
148 List request = new List(3); 167 List request = new List(3);
149 request[0] = RENAME_REQUEST; 168 request[0] = RENAME_REQUEST;
150 request[1] = _path; 169 request[1] = _path;
151 request[2] = newPath; 170 request[2] = newPath;
152 return _directoryService.call(request).transform((response) { 171 return _directoryService.call(request).transform((response) {
153 if (_isErrorResponse(response)) { 172 if (_isErrorResponse(response)) {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 } else { 303 } else {
285 throw e; 304 throw e;
286 } 305 }
287 } 306 }
288 307
289 Function _onDir; 308 Function _onDir;
290 Function _onFile; 309 Function _onFile;
291 Function _onDone; 310 Function _onDone;
292 Function _onError; 311 Function _onError;
293 } 312 }
OLDNEW
« 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