From 5ddc370521bde9faf7193dd7bdf0be871e85e140 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Thu, 13 Apr 2017 09:55:34 -0700 Subject: [PATCH 1/9] 1.0.61. --- kobalt/wrapper/kobalt-wrapper.properties | 2 +- src/main/resources/kobalt.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kobalt/wrapper/kobalt-wrapper.properties b/kobalt/wrapper/kobalt-wrapper.properties index 19b565d8..db96a9e1 100644 --- a/kobalt/wrapper/kobalt-wrapper.properties +++ b/kobalt/wrapper/kobalt-wrapper.properties @@ -1 +1 @@ -kobalt.version=1.0.60 +kobalt.version=1.0.61 diff --git a/src/main/resources/kobalt.properties b/src/main/resources/kobalt.properties index 19b565d8..db96a9e1 100644 --- a/src/main/resources/kobalt.properties +++ b/src/main/resources/kobalt.properties @@ -1 +1 @@ -kobalt.version=1.0.60 +kobalt.version=1.0.61 From 8bd098c458053bfb28565bbd04b8553892b843e0 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 07:07:17 -0700 Subject: [PATCH 2/9] Fix Windows tests. --- src/test/kotlin/com/beust/kobalt/BaseTest.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/test/kotlin/com/beust/kobalt/BaseTest.kt b/src/test/kotlin/com/beust/kobalt/BaseTest.kt index 55c4aa78..397d29cd 100644 --- a/src/test/kotlin/com/beust/kobalt/BaseTest.kt +++ b/src/test/kotlin/com/beust/kobalt/BaseTest.kt @@ -100,15 +100,13 @@ open class BaseTest(val compilerFactory: BuildFileCompiler.IFactory? = null) { val projectName = "p" + Math.abs(Random().nextInt()) val version = "1.0" - fun createFile(root: File, f: String, text: String) : File { - val file = File(root, f) - file.parentFile.mkdirs() - file.writeText(text) - return file + fun createFile(root: File, f: String, text: String) = File(root, f).apply { + parentFile.mkdirs() + writeText(text) } createFile(root, "kobalt/src/Build.kt", - projectInfo.buildFile.text(root.absolutePath, projectName, version)) + projectInfo.buildFile.text(KFiles.fixSlashes(root.absolutePath), projectName, version)) projectInfo.files.forEach { createFile(root, it.path, it.content) @@ -125,7 +123,7 @@ open class BaseTest(val compilerFactory: BuildFileCompiler.IFactory? = null) { val main = Kobalt.INJECTOR.getInstance(Main::class.java) val args = Args() val jc = JCommander(args).apply { parse(*commandLine) } - args.buildFile = project.file.absolutePath + "/kobalt/src/Build.kt" + args.buildFile = KFiles.fixSlashes(project.file.absolutePath) + "/kobalt/src/Build.kt" val result = Main.launchMain(main, jc, args, arrayOf("assemble")) return LaunchProjectResult(projectInfo, project, result) } From 581b3de13e8b0ce571e801972035d7719ce7d141 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 07:07:47 -0700 Subject: [PATCH 3/9] Refactor. --- src/test/kotlin/com/beust/kobalt/BaseTest.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/kotlin/com/beust/kobalt/BaseTest.kt b/src/test/kotlin/com/beust/kobalt/BaseTest.kt index 397d29cd..51bbcf5e 100644 --- a/src/test/kotlin/com/beust/kobalt/BaseTest.kt +++ b/src/test/kotlin/com/beust/kobalt/BaseTest.kt @@ -114,18 +114,16 @@ open class BaseTest(val compilerFactory: BuildFileCompiler.IFactory? = null) { return ProjectDescription(root, projectName, version) } - class LaunchProjectResult(val projectInfo: ProjectInfo, val projectDescription: ProjectDescription, - val result: Int) + class LaunchProjectResult(val projectDescription: ProjectDescription, val result: Int) fun launchProject(projectInfo: ProjectInfo, commandLine: Array) : LaunchProjectResult { val project = createProject(projectInfo) - println("Project: $project") val main = Kobalt.INJECTOR.getInstance(Main::class.java) val args = Args() val jc = JCommander(args).apply { parse(*commandLine) } args.buildFile = KFiles.fixSlashes(project.file.absolutePath) + "/kobalt/src/Build.kt" val result = Main.launchMain(main, jc, args, arrayOf("assemble")) - return LaunchProjectResult(projectInfo, project, result) + return LaunchProjectResult(project, result) } } From 91260d2f57eb8f18dd717c4b081a46a1423d339a Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 11:22:59 -0700 Subject: [PATCH 4/9] Not used. --- .../kotlin/com/beust/kobalt/plugin/packaging/WarGenerator.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/kotlin/com/beust/kobalt/plugin/packaging/WarGenerator.kt b/src/main/kotlin/com/beust/kobalt/plugin/packaging/WarGenerator.kt index 4f42f6c4..f5e21b8d 100644 --- a/src/main/kotlin/com/beust/kobalt/plugin/packaging/WarGenerator.kt +++ b/src/main/kotlin/com/beust/kobalt/plugin/packaging/WarGenerator.kt @@ -11,9 +11,7 @@ import com.beust.kobalt.maven.DependencyManager import com.beust.kobalt.misc.KFiles import com.google.inject.Inject import java.io.File -import java.io.OutputStream import java.nio.file.Paths -import java.util.jar.JarOutputStream class WarGenerator @Inject constructor(val dependencyManager: DependencyManager, val kobaltLog: ParallelLogger) : ArchiveGenerator { @@ -86,7 +84,6 @@ class WarGenerator @Inject constructor(val dependencyManager: DependencyManager, manifest.mainAttributes.putValue(attribute.first, attribute.second) } - val jarFactory = { os: OutputStream -> JarOutputStream(os, manifest) } return Archives.generateArchive(project, context, war.name, ".war", files, false /* don't expand jar files */, manifest) } From 2b3fc7a2c966c3c7f12a9aa2324386d775e1813b Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 12:14:43 -0700 Subject: [PATCH 5/9] Fix the zip task. --- .../com/beust/kobalt/archive/MetaArchive.kt | 15 ++++++++++----- .../main/kotlin/com/beust/kobalt/misc/JarUtils.kt | 5 ++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/archive/MetaArchive.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/archive/MetaArchive.kt index 1e531359..69918dd4 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/archive/MetaArchive.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/archive/MetaArchive.kt @@ -3,28 +3,33 @@ package com.beust.kobalt.archive import com.beust.kobalt.Glob import com.beust.kobalt.misc.KFiles import org.apache.commons.compress.archivers.ArchiveEntry +import org.apache.commons.compress.archivers.zip.ZipArchiveEntry import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream import java.io.Closeable import java.io.File import java.io.FileInputStream import java.io.FileOutputStream import java.nio.file.Files +import java.util.jar.Manifest import org.apache.commons.compress.archivers.zip.ZipFile as ApacheZipFile /** * Abstraction of a zip/jar/war archive that automatically manages the addition of expanded jar files. * Uses ZipArchiveOutputStream for fast inclusion of expanded jar files. */ -class MetaArchive(outputFile: File, val manifest: java.util.jar.Manifest?) : Closeable { +class MetaArchive(outputFile: File, val manifest: Manifest?) : Closeable { private val zos = ZipArchiveOutputStream(outputFile).apply { encoding = "UTF-8" } - fun addFile(file: File, path: String) { + fun addFile(f: File, entryFile: File, path: String?) { + val file = f.normalize() FileInputStream(file).use { inputStream -> - val entry = zos.createArchiveEntry(file, path) - maybeAddEntry(entry) { - addEntry(entry, inputStream) + val actualPath = if (path != null) path + entryFile.path else entryFile.path + ZipArchiveEntry(actualPath).let { entry -> + maybeAddEntry(entry) { + addEntry(entry, inputStream) + } } } } diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt index 81420a43..5d4aa8cd 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/misc/JarUtils.kt @@ -55,7 +55,10 @@ class JarUtils { kobaltLog(2, " Writing contents of jar file $foundFile") metaArchive.addArchive(foundFile) } else { - metaArchive.addFile(File(directory, fromFile.path), foundFile.path) + val fp = foundFile.path + val toPath = File(file.to).normalize().path + val finalPath = if (toPath.isEmpty()) null else (toPath + "/") + metaArchive.addFile(File(directory, fromFile.path), foundFile, finalPath) } } catch(ex: Exception) { onError(ex) From 19dc26ac16867ade7e0402760a1b7b72d138b0e5 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 12:15:01 -0700 Subject: [PATCH 6/9] Make sure the zip entries start with kobalt-${version}. --- .../com/beust/kobalt/VerifyKobaltZipTest.kt | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt index 03278f4e..18aa4263 100644 --- a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt +++ b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt @@ -1,12 +1,19 @@ package com.beust.kobalt -import com.beust.kobalt.misc.* +import com.beust.kobalt.misc.KFiles +import com.beust.kobalt.misc.kobaltLog +import com.beust.kobalt.misc.warn import org.testng.annotations.Test -import java.io.* +import java.io.File +import java.io.FileInputStream +import java.io.FileReader +import java.io.InputStream import java.nio.file.Files import java.nio.file.Paths import java.util.* -import java.util.jar.* +import java.util.jar.JarEntry +import java.util.jar.JarFile +import java.util.jar.JarInputStream /** * Make sure the distribution zip file contains all the right files and no bad files. @@ -23,13 +30,17 @@ class VerifyKobaltZipTest : KobaltTest() { var foundJar = false var foundWrapperJar = false - val mainJarFilePath = "kobalt-$KOBALT_VERSION.jar" - val zipFilePath = KFiles.joinDir("kobaltBuild", "libs", "kobalt-$KOBALT_VERSION.zip") + val root = "kobalt-$KOBALT_VERSION" + val mainJarFilePath = "$root.jar" + val zipFilePath = KFiles.joinDir("kobaltBuild", "libs", "$root.zip") if (File(zipFilePath).exists()) { val zipFile = JarFile(zipFilePath) val stream = JarInputStream(FileInputStream(zipFilePath)) var entry = stream.nextEntry while (entry != null) { + if (! entry.name.startsWith(root)) { + throw AssertionError("Entries in the zip file should be under the directory $root") + } if (entry.name.endsWith("kobaltw")) { val ins = zipFile.getInputStream(entry) ins.readBytes().forEach { From f4a5d188e7cef7b3a97bd3f6c384955b328eba09 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 12:15:50 -0700 Subject: [PATCH 7/9] Use AssertionErrors in tests. --- .../kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt index 18aa4263..c15e95d2 100644 --- a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt +++ b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt @@ -46,19 +46,19 @@ class VerifyKobaltZipTest : KobaltTest() { ins.readBytes().forEach { // Look for carriage returns if (it.compareTo(13) == 0) { - throw KobaltException("kobaltw has wrong line endings") + throw AssertionError("kobaltw has wrong line endings") } } if (OperatingSystem.current().isWindows()) { warn("Can't determine if kobaltw is executable under Windows") } else if (!Files.isExecutable(Paths.get("dist/kobaltw"))) { - throw KobaltException("kobaltw has invalid permissions") + throw AssertionError("kobaltw has invalid permissions") } foundKobaltw = true } else if (entry.name.endsWith(mainJarFilePath)) { val ins = zipFile.getInputStream(entry) if (ins.available() < 20000000) { - throw KobaltException(mainJarFilePath + " is too small: " + mainJarFilePath) + throw AssertionError(mainJarFilePath + " is too small: " + mainJarFilePath) } verifyMainJarFile(ins) foundJar = true @@ -70,13 +70,13 @@ class VerifyKobaltZipTest : KobaltTest() { entry = stream.nextEntry } if (!foundKobaltw) { - throw KobaltException("Couldn't find kobaltw in $zipFilePath") + throw AssertionError("Couldn't find kobaltw in $zipFilePath") } if (!foundJar) { - throw KobaltException("Couldn't find jar in $zipFilePath") + throw AssertionError("Couldn't find jar in $zipFilePath") } if (!foundWrapperJar) { - throw KobaltException("Couldn't find wrapper jar in $zipFilePath") + throw AssertionError("Couldn't find wrapper jar in $zipFilePath") } kobaltLog(1, "$zipFilePath looks correct") } else { From c4813880acb16e0cd13b280051a83c6c800594e1 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 12:15:55 -0700 Subject: [PATCH 8/9] Comment. --- kobalt/src/Build.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/kobalt/src/Build.kt b/kobalt/src/Build.kt index f335067c..a497aac2 100644 --- a/kobalt/src/Build.kt +++ b/kobalt/src/Build.kt @@ -223,6 +223,7 @@ val kobaltApp = project(kobaltPluginApi, wrapper) { include(from(files[i]), to(files[i + 1]), files[i + 2]) } + // Package the sources val currentDir = Paths.get(".").toAbsolutePath().normalize().toString() zipFolders("$currentDir/$buildDirectory/libs/all-sources/$projectName-$version-sources.jar", "$currentDir/$directory/src/main/kotlin", From e45e93cee88f15209e9631591dd8abcf7c763ef7 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 14 Apr 2017 12:24:27 -0700 Subject: [PATCH 9/9] 1.0.62. --- kobalt/wrapper/kobalt-wrapper.properties | 2 +- src/main/resources/kobalt.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kobalt/wrapper/kobalt-wrapper.properties b/kobalt/wrapper/kobalt-wrapper.properties index db96a9e1..f5e39865 100644 --- a/kobalt/wrapper/kobalt-wrapper.properties +++ b/kobalt/wrapper/kobalt-wrapper.properties @@ -1 +1 @@ -kobalt.version=1.0.61 +kobalt.version=1.0.62 diff --git a/src/main/resources/kobalt.properties b/src/main/resources/kobalt.properties index db96a9e1..f5e39865 100644 --- a/src/main/resources/kobalt.properties +++ b/src/main/resources/kobalt.properties @@ -1 +1 @@ -kobalt.version=1.0.61 +kobalt.version=1.0.62