Index: utils/pub/io.dart |
diff --git a/utils/pub/io.dart b/utils/pub/io.dart |
index 1d9b82416e3eb91b86e0ca41499e48134701fb7e..3f54fcdd915cac4bc05e4dafd5d77f119ff3c5b8 100644 |
--- a/utils/pub/io.dart |
+++ b/utils/pub/io.dart |
@@ -29,11 +29,13 @@ bool isBeneath(String entry, String dir) { |
return !path.isAbsolute(relative) && path.split(relative)[0] != '..'; |
} |
-/// Determines if a file or directory at [path] exists. |
-bool entryExists(String path) => fileExists(path) || dirExists(path); |
+/// Determines if a file or directory exists at [path]. |
+bool entryExists(String path) => dirExists(path) || fileExists(path); |
-/// Determines if [file] exists on the file system. |
-bool fileExists(String file) => new File(file).existsSync(); |
+/// Determines if [file] exists on the file system. Will also return `true` if |
+/// [file] points to a symlink, even a directory symlink. |
+bool fileExists(String file) => |
+ new File(file).existsSync() || new Link(file).existsSync(); |
/// Reads the contents of the text file [file]. |
String readTextFile(String file) => |
@@ -212,10 +214,16 @@ Future<String> cleanDir(String dir) { |
if (dirExists(dir)) { |
// Delete it first. |
return deleteDir(dir).then((_) => createDir(dir)); |
- } else { |
- // Just create it. |
+ } |
+ |
+ if (fileExists(dir)) { |
+ // If there is a non-directory there (file or symlink), delete it. |
+ deleteFile(dir); |
return createDir(dir); |
} |
+ |
+ // Just create it. |
+ return createDir(dir); |
}); |
} |