From 8ca320bedca1a07587d999730269930267fff8aa Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Sun, 20 Mar 2016 20:06:14 -0700 Subject: [PATCH] Finish --gc. --- .../main/kotlin/com/beust/kobalt/misc/Io.kt | 18 ++++++++--- .../kotlin/com/beust/kobalt/internal/Gc.kt | 32 ++++--------------- 2 files changed, 20 insertions(+), 30 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Io.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Io.kt index 3129bc0e..399bde5a 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Io.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/Io.kt @@ -45,12 +45,22 @@ class Io(val dryRun: Boolean = false) { } } - fun rmDir(dir: File) { + fun rmDir(dir: File, keep: (File) -> Boolean = { t -> false }) = rmDir(dir, keep, " ") + + private fun rmDir(dir: File, keep: (File) -> Boolean, indent : String) { log("rm -rf $dir") - if (! dryRun) { - require(dir.isDirectory, { -> println("$dir should be a directory")}) - dir.deleteRecursively() + require(dir.isDirectory, { -> println("$dir should be a directory")}) + + dir.listFiles({ p0 -> ! keep(p0!!) }).forEach { + if (it.isDirectory) { + rmDir(it, keep, indent + " ") + it.deleteRecursively() + } + else { + log(indent + "rm $it") + if (! dryRun) it.delete() + } } } diff --git a/src/main/kotlin/com/beust/kobalt/internal/Gc.kt b/src/main/kotlin/com/beust/kobalt/internal/Gc.kt index 2bcb8f6c..f79fcf02 100644 --- a/src/main/kotlin/com/beust/kobalt/internal/Gc.kt +++ b/src/main/kotlin/com/beust/kobalt/internal/Gc.kt @@ -4,38 +4,18 @@ import com.beust.kobalt.api.Kobalt import com.beust.kobalt.misc.Io import com.beust.kobalt.misc.KFiles import java.io.File -import java.nio.file.Files /** * Clean up old Kobalt files. */ class Gc { fun run() { - // Delete all the distributions except the current one - val dist = KFiles.distributionsDir + val io = Io(dryRun = false) + + // Delete all the files that don't have kobalt-$version in them val version = Kobalt.version - val tmpDir = Files.createTempDirectory("kobalt") - - // Zipfile - val io = Io(dryRun = true) - val zipFileName = "kobalt-$version.zip" - io.moveFile(File(KFiles.joinDir(dist, zipFileName)), tmpDir.toFile()) - - // Distribution directory - val zipDirectoryName = "kobalt-$version" - val zipDirectory = File(KFiles.joinDir(dist, zipDirectoryName)) - io.copyDirectory(zipDirectory, tmpDir.toFile()) - - // Delete the whole dist directory and recreate it - File(dist).let { distFile -> - io.rmDir(distFile) - io.mkdir(distFile) - - // Copy the files back - tmpDir.toFile().absolutePath.let { fromPath -> - io.moveFile(File(KFiles.joinDir(fromPath, zipFileName)), distFile) - io.copyDirectory(File(KFiles.joinDir(fromPath, zipDirectoryName)), distFile) - } - } + val name = "kobalt-$version" + val dist = File(KFiles.distributionsDir) + io.rmDir(dist) { f: File -> f.absolutePath.contains(name) } } }