From ea3a2eefe7015d240f9d1d2321e1bce4e3e59952 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Tue, 22 Dec 2015 19:13:42 +0300 Subject: [PATCH] File.deleteRecursively returns true even if path specified by File does not exist. False is returned only in case of incomplete deletion. Distinguish situations when file was not deleted because it's vanished after listing and because of some other error. --- libraries/stdlib/src/kotlin/io/files/Utils.kt | 2 +- libraries/stdlib/test/io/Files.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/stdlib/src/kotlin/io/files/Utils.kt b/libraries/stdlib/src/kotlin/io/files/Utils.kt index f9274b2c40b..a66160e4dd2 100644 --- a/libraries/stdlib/src/kotlin/io/files/Utils.kt +++ b/libraries/stdlib/src/kotlin/io/files/Utils.kt @@ -367,7 +367,7 @@ public fun File.copyRecursively(dst: File, * * @return `true` if the file or directory is successfully deleted, `false` otherwise. */ -public fun File.deleteRecursively(): Boolean = walkBottomUp().fold(exists(), { res, it -> it.delete() && res }) +public fun File.deleteRecursively(): Boolean = walkBottomUp().fold(true, { res, it -> (it.delete() || !it.exists()) && res }) /** * Returns an array of files and directories in the directory that match the specified [filter] diff --git a/libraries/stdlib/test/io/Files.kt b/libraries/stdlib/test/io/Files.kt index 41767d1b0cb..c83fe5417f7 100644 --- a/libraries/stdlib/test/io/Files.kt +++ b/libraries/stdlib/test/io/Files.kt @@ -440,7 +440,7 @@ class FilesTest { assertTrue(dir.deleteRecursively()) assertFalse(dir.exists()) - assertFalse(dir.deleteRecursively()) + assertTrue(dir.deleteRecursively()) } @test fun deleteRecursivelyWithFail() { @@ -449,7 +449,7 @@ class FilesTest { try { if (restricted.setReadable(false)) { if (File(basedir, "7.txt").setReadable(false)) { - basedir.deleteRecursively() + assertFalse(basedir.deleteRecursively(), "Expected incomplete recursive deletion.") restricted.setReadable(true) File(basedir, "7.txt").setReadable(true) var i = 0