Index: sdk/lib/io/file_system_entity.dart |
diff --git a/sdk/lib/io/file_system_entity.dart b/sdk/lib/io/file_system_entity.dart |
index ee088cc7ce7ee6a4dee91827802ac92cbeed2832..0887175e859713a681c37ffc5c57d96c66a0cc3a 100644 |
--- a/sdk/lib/io/file_system_entity.dart |
+++ b/sdk/lib/io/file_system_entity.dart |
@@ -168,77 +168,6 @@ FileStat: type $type |
abstract class FileSystemEntity { |
String get path; |
- external static _getType(String path, bool followLinks); |
- external static _identical(String path1, String path2); |
- |
- static int _getTypeSync(String path, bool followLinks) { |
- var result = _getType(path, followLinks); |
- _throwIfError(result, 'Error getting type of FileSystemEntity'); |
- return result; |
- } |
- |
- static Future<int> _getTypeAsync(String path, bool followLinks) { |
- // Get a new file service port for each request. We could also cache one. |
- var service = _FileUtils._newServicePort(); |
- List request = new List(3); |
- request[0] = _TYPE_REQUEST; |
- request[1] = path; |
- request[2] = followLinks; |
- return service.call(request).then((response) { |
- if (_isErrorResponse(response)) { |
- throw _exceptionFromResponse(response, "Error getting type", path); |
- } |
- return response; |
- }); |
- } |
- |
- /** |
- * Synchronously checks whether two paths refer to the same object in the |
- * file system. Returns a [:Future<bool>:] that completes with the result. |
- * |
- * Comparing a link to its target returns false, as does comparing two links |
- * that point to the same target. To check the target of a link, use |
- * Link.target explicitly to fetch it. Directory links appearing |
- * inside a path are followed, though, to find the file system object. |
- * |
- * Completes the returned Future with an error if one of the paths points |
- * to an object that does not exist. |
- */ |
- static Future<bool> identical(String path1, String path2) { |
- // Get a new file service port for each request. We could also cache one. |
- var service = _FileUtils._newServicePort(); |
- List request = new List(3); |
- request[0] = _IDENTICAL_REQUEST; |
- request[1] = path1; |
- request[2] = path2; |
- return service.call(request).then((response) { |
- if (_isErrorResponse(response)) { |
- throw _exceptionFromResponse(response, |
- "Error in FileSystemEntity.identical($path1, $path2)", ""); |
- } |
- return response; |
- }); |
- } |
- |
- |
- /** |
- * Synchronously checks whether two paths refer to the same object in the |
- * file system. |
- * |
- * Comparing a link to its target returns false, as does comparing two links |
- * that point to the same target. To check the target of a link, use |
- * Link.target explicitly to fetch it. Directory links appearing |
- * inside a path are followed, though, to find the file system object. |
- * |
- * Throws an error if one of the paths points to an object that does not |
- * exist. |
- */ |
- static bool identicalSync(String path1, String path2) { |
- var result = _identical(path1, path2); |
- _throwIfError(result, 'Error in FileSystemEntity.identicalSync'); |
- return result; |
- } |
- |
/** |
* Checks whether the file system entity with this path exists. Returns |
* a [:Future<bool>:] that completes with the result. |
@@ -316,6 +245,45 @@ abstract class FileSystemEntity { |
*/ |
FileStat statSync(); |
+ /** |
+ * Deletes this [FileSystemEntity]. |
+ * |
+ * If the [FileSystemEntity] is a directory, and if [recursive] is false, |
+ * the directory must be empty. Otherwise, if [recursive] is true, the |
+ * directory and all sub-directories and files in the directories are |
+ * deleted. Links are not followed when deleting recursively. Only the link |
+ * is deleted, not its target. |
+ * |
+ * If [recursive] is true, the [FileSystemEntity] is deleted even if the type |
+ * of the [FileSystemEntity] doesn't match the content of the file system. |
+ * This behavior allows [delete] to be used to unconditionally delete any file |
+ * system object. |
+ * |
+ * Returns a [:Future<FileSystemEntity>:] that completes with this |
+ * [FileSystemEntity] when the deletion is done. If the [FileSystemEntity] |
+ * cannot be deleted, the future completes with an exception. |
+ */ |
+ Future<FileSystemEntity> delete({recursive: false}) |
+ => _delete(recursive: recursive); |
+ |
+ /** |
+ * Synchronously deletes this [FileSystemEntity]. |
+ * |
+ * If the [FileSystemEntity] is a directory, and if [recursive] is false, |
+ * the directory must be empty. Otherwise, if [recursive] is true, the |
+ * directory and all sub-directories and files in the directories are |
+ * deleted. Links are not followed when deleting recursively. Only the link |
+ * is deleted, not its target. |
+ * |
+ * If [recursive] is true, the [FileSystemEntity] is deleted even if the type |
+ * of the [FileSystemEntity] doesn't match the content of the file system. |
+ * This behavior allows [deleteSync] to be used to unconditionally delete any |
+ * file system object. |
+ * |
+ * Throws an exception if the [FileSystemEntity] cannot be deleted. |
+ */ |
+ void deleteSync({recursive: false}) |
+ => _deleteSync(recursive: recursive); |
/** |
@@ -344,6 +312,56 @@ abstract class FileSystemEntity { |
events, |
recursive).stream; |
+ Future<FileSystemEntity> _delete({recursive: false}); |
+ void _deleteSync({recursive: false}); |
+ |
+ /** |
+ * Synchronously checks whether two paths refer to the same object in the |
+ * file system. Returns a [:Future<bool>:] that completes with the result. |
+ * |
+ * Comparing a link to its target returns false, as does comparing two links |
+ * that point to the same target. To check the target of a link, use |
+ * Link.target explicitly to fetch it. Directory links appearing |
+ * inside a path are followed, though, to find the file system object. |
+ * |
+ * Completes the returned Future with an error if one of the paths points |
+ * to an object that does not exist. |
+ */ |
+ static Future<bool> identical(String path1, String path2) { |
+ // Get a new file service port for each request. We could also cache one. |
+ var service = _FileUtils._newServicePort(); |
+ List request = new List(3); |
+ request[0] = _IDENTICAL_REQUEST; |
+ request[1] = path1; |
+ request[2] = path2; |
+ return service.call(request).then((response) { |
+ if (_isErrorResponse(response)) { |
+ throw _exceptionFromResponse(response, |
+ "Error in FileSystemEntity.identical($path1, $path2)", ""); |
+ } |
+ return response; |
+ }); |
+ } |
+ |
+ |
+ /** |
+ * Synchronously checks whether two paths refer to the same object in the |
+ * file system. |
+ * |
+ * Comparing a link to its target returns false, as does comparing two links |
+ * that point to the same target. To check the target of a link, use |
+ * Link.target explicitly to fetch it. Directory links appearing |
+ * inside a path are followed, though, to find the file system object. |
+ * |
+ * Throws an error if one of the paths points to an object that does not |
+ * exist. |
+ */ |
+ static bool identicalSync(String path1, String path2) { |
+ var result = _identical(path1, path2); |
+ _throwIfError(result, 'Error in FileSystemEntity.identicalSync'); |
+ return result; |
+ } |
+ |
/** |
* Test if [watch] is supported on the current system. |
* |
@@ -351,7 +369,6 @@ abstract class FileSystemEntity { |
*/ |
static bool get isWatchSupported => _FileSystemWatcher.isSupported; |
- |
/** |
* Finds the type of file system object that a path points to. Returns |
* a [:Future<FileSystemEntityType>:] that completes with the result. |
@@ -383,7 +400,6 @@ abstract class FileSystemEntity { |
static FileSystemEntityType typeSync(String path, {bool followLinks: true}) |
=> FileSystemEntityType._lookup(_getTypeSync(path, followLinks)); |
- |
/** |
* Checks if type(path, followLinks: false) returns |
* FileSystemEntityType.LINK. |
@@ -424,6 +440,29 @@ abstract class FileSystemEntity { |
static bool isDirectorySync(String path) => |
(_getTypeSync(path, true) == FileSystemEntityType.DIRECTORY._type); |
+ external static _getType(String path, bool followLinks); |
+ external static _identical(String path1, String path2); |
+ |
+ static int _getTypeSync(String path, bool followLinks) { |
+ var result = _getType(path, followLinks); |
+ _throwIfError(result, 'Error getting type of FileSystemEntity'); |
+ return result; |
+ } |
+ |
+ static Future<int> _getTypeAsync(String path, bool followLinks) { |
+ // Get a new file service port for each request. We could also cache one. |
+ var service = _FileUtils._newServicePort(); |
+ List request = new List(3); |
+ request[0] = _TYPE_REQUEST; |
+ request[1] = path; |
+ request[2] = followLinks; |
+ return service.call(request).then((response) { |
+ if (_isErrorResponse(response)) { |
+ throw _exceptionFromResponse(response, "Error getting type", path); |
+ } |
+ return response; |
+ }); |
+ } |
static _throwIfError(Object result, String msg, [String path]) { |
if (result is OSError) { |