in intellij-plugin-verifier/verifier-repository/src/main/java/com/jetbrains/pluginverifier/ide/IdeDownloader.kt [99:145]
fun stripTopLevelDirectory(directory: Path) {
val entries = directory.listFiles()
if (entries.size != 1) {
return
}
val single = entries.single()
if (!single.isDirectory) {
return
}
val contents = single.listFiles()
if (contents.isEmpty()) {
Files.delete(single)
return
}
var conflict: Path? = null
for (from in contents) {
if (from.simpleName == single.simpleName) {
conflict = from
continue
}
val to = directory.resolve(from.simpleName)
Files.move(from, to)
}
if (conflict != null) {
//Create a unique temporary name from the set of files.
//This name will be used as a destination of a conflicting name.
val uniqueTempName = contents.maxOfOrNull { it.simpleName } + ".temp"
val tempDestination = directory.resolve(uniqueTempName)
//Move conflict to unique location.
require(!tempDestination.exists())
Files.move(conflict, tempDestination)
//Delete empty single
require(single.listFiles().isEmpty())
single.deleteLogged()
Files.move(tempDestination, single)
} else {
single.deleteLogged()
}
}