KT-57298 createParentDirectories: handle already existing directory symlink
This commit is contained in:
committed by
Space Team
parent
912b65060e
commit
f8d001c21f
@@ -562,8 +562,16 @@ public inline fun Path.createDirectories(vararg attributes: FileAttribute<*>): P
|
||||
*/
|
||||
@SinceKotlin("1.9")
|
||||
@Throws(IOException::class)
|
||||
public fun Path.createParentDirectories(vararg attributes: FileAttribute<*>): Path =
|
||||
this.apply { parent?.createDirectories(*attributes) }
|
||||
public fun Path.createParentDirectories(vararg attributes: FileAttribute<*>): Path = also {
|
||||
val parent = it.parent
|
||||
if (parent != null && !parent.isDirectory()) {
|
||||
try {
|
||||
parent.createDirectories(*attributes)
|
||||
} catch (e: FileAlreadyExistsException) {
|
||||
if (!parent.isDirectory()) throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Moves or renames the file located by this path to the [target] path.
|
||||
|
||||
@@ -98,6 +98,16 @@ class PathExtensionsTest : AbstractPathTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createParentDirectoriesOverExistingSymlink() {
|
||||
val root = createTempDirectory("createParent-root").cleanupRecursively()
|
||||
val dir = (root / "dir").createDirectory()
|
||||
val link = (root / "link").tryCreateSymbolicLinkTo(dir) ?: return
|
||||
val file = (link / "file")
|
||||
file.createParentDirectories().writeText("txt")
|
||||
assertTrue((dir / "file").isRegularFile())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun createTempFileDefaultDir() {
|
||||
val file1 = createTempFile().cleanup()
|
||||
|
||||
Reference in New Issue
Block a user