1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 08:27:12 -07:00

Finish --gc.

This commit is contained in:
Cedric Beust 2016-03-20 20:06:14 -07:00
parent 7a0ead0eac
commit 8ca320bedc
2 changed files with 20 additions and 30 deletions

View file

@ -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()
}
}
}

View file

@ -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) }
}
}