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

Side by Side Diff: sdk/lib/io/link.dart

Issue 23889008: Move delete/deleteSync up to FileSystemEntity, with a shared documentation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Style fixes. Created 7 years, 3 months 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
« no previous file with comments | « sdk/lib/io/file_system_entity.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 /** 7 /**
8 * [Link] objects are references to filesystem links. 8 * [Link] objects are references to filesystem links.
9 * 9 *
10 */ 10 */
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 * Updates the link. Returns a [:Future<Link>:] that completes with the 58 * Updates the link. Returns a [:Future<Link>:] that completes with the
59 * link when it has been updated. Calling [update] on a non-existing link 59 * link when it has been updated. Calling [update] on a non-existing link
60 * will complete its returned future with an exception. 60 * will complete its returned future with an exception.
61 * 61 *
62 * On the Windows platform, this will only work with directories, and the 62 * On the Windows platform, this will only work with directories, and the
63 * target directory must exist. 63 * target directory must exist.
64 */ 64 */
65 Future<Link> update(String target); 65 Future<Link> update(String target);
66 66
67 /** 67 /**
68 * Deletes the link. Returns a [:Future<Link>:] that completes with
69 * the link when it has been deleted. This does not delete, or otherwise
70 * affect, the target of the link. It also works on broken links, but if
71 * the link does not exist or is not actually a link, it completes the
72 * future with a LinkException.
73 */
74 Future<Link> delete();
75
76 /**
77 * Synchronously deletes the link. This does not delete, or otherwise
78 * affect, the target of the link. It also works on broken links, but if
79 * the link does not exist or is not actually a link, it throws a
80 * LinkException.
81 */
82 void deleteSync();
83
84 /**
85 * Renames this link. Returns a `Future<Link>` that completes 68 * Renames this link. Returns a `Future<Link>` that completes
86 * with a [Link] instance for the renamed link. 69 * with a [Link] instance for the renamed link.
87 * 70 *
88 * If [newPath] identifies an existing link, that link is 71 * If [newPath] identifies an existing link, that link is
89 * replaced. If [newPath] identifies an existing file or directory, 72 * replaced. If [newPath] identifies an existing file or directory,
90 * the operation fails and the future completes with an exception. 73 * the operation fails and the future completes with an exception.
91 */ 74 */
92 Future<Link> rename(String newPath); 75 Future<Link> rename(String newPath);
93 76
94 /** 77 /**
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 } 189 }
207 190
208 Future<Link> update(String target) { 191 Future<Link> update(String target) {
209 // TODO(12414): Replace with atomic update, where supported by platform. 192 // TODO(12414): Replace with atomic update, where supported by platform.
210 // Atomically changing a link can be done by creating the new link, with 193 // Atomically changing a link can be done by creating the new link, with
211 // a different name, and using the rename() posix call to move it to 194 // a different name, and using the rename() posix call to move it to
212 // the old name atomically. 195 // the old name atomically.
213 return delete().then((_) => create(target)); 196 return delete().then((_) => create(target));
214 } 197 }
215 198
216 Future<Link> delete() { 199 Future<Link> _delete({bool recursive: false}) {
200 if (recursive) {
201 return new Directory(path).delete(recursive: true).then((_) => this);
202 }
217 _ensureFileService(); 203 _ensureFileService();
218 List request = new List(2); 204 List request = new List(2);
219 request[0] = _DELETE_LINK_REQUEST; 205 request[0] = _DELETE_LINK_REQUEST;
220 request[1] = path; 206 request[1] = path;
221 return _fileService.call(request).then((response) { 207 return _fileService.call(request).then((response) {
222 if (_isErrorResponse(response)) { 208 if (_isErrorResponse(response)) {
223 throw _exceptionFromResponse(response, "Cannot delete link", path); 209 throw _exceptionFromResponse(response, "Cannot delete link", path);
224 } 210 }
225 return this; 211 return this;
226 }); 212 });
227 } 213 }
228 214
229 void deleteSync() { 215 void _deleteSync({bool recursive: false}) {
230 var result = _File._deleteLink(path); 216 if (recursive) {
217 return new Directory(path).deleteSync(recursive: true);
218 }
219 var result = _File._deleteLinkNative(path);
231 throwIfError(result, "Cannot delete link", path); 220 throwIfError(result, "Cannot delete link", path);
232 } 221 }
233 222
234 Future<Link> rename(String newPath) { 223 Future<Link> rename(String newPath) {
235 _ensureFileService(); 224 _ensureFileService();
236 List request = new List(3); 225 List request = new List(3);
237 request[0] = _RENAME_LINK_REQUEST; 226 request[0] = _RENAME_LINK_REQUEST;
238 request[1] = path; 227 request[1] = path;
239 request[2] = newPath; 228 request[2] = newPath;
240 return _fileService.call(request).then((response) { 229 return _fileService.call(request).then((response) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 if (path != null) { 313 if (path != null) {
325 sb.write(", path = $path"); 314 sb.write(", path = $path");
326 } 315 }
327 } 316 }
328 return sb.toString(); 317 return sb.toString();
329 } 318 }
330 final String message; 319 final String message;
331 final String path; 320 final String path;
332 final OSError osError; 321 final OSError osError;
333 } 322 }
OLDNEW
« no previous file with comments | « sdk/lib/io/file_system_entity.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698