From 2f386a622d9f154c68362c947d330a09e2fd4da0 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Fri, 19 Feb 2016 02:01:40 +0400 Subject: [PATCH] Fix inclusion bug. --- .../main/kotlin/com/beust/kobalt/FileSpec.kt | 10 ++++-- .../kotlin/com/beust/kobalt/misc/JarUtils.kt | 5 +-- .../kobalt/plugin/packaging/JarGenerator.kt | 5 +-- .../plugin/packaging/PackagingPlugin.kt | 6 ++-- .../com/beust/kobalt/IncludeExcludeTest.kt | 33 +++++++++++++++---- .../com/beust/kobalt/VerifyKobaltZipTest.kt | 2 +- 6 files changed, 44 insertions(+), 17 deletions(-) diff --git a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/FileSpec.kt b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/FileSpec.kt index 124f6d09..13ed4551 100644 --- a/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/FileSpec.kt +++ b/modules/kobalt-plugin-api/src/main/kotlin/com/beust/kobalt/FileSpec.kt @@ -42,9 +42,13 @@ sealed class IFileSpec { val includes = Glob(*spec.toTypedArray()) if (File(filePath).isDirectory) { - Files.walkFileTree(Paths.get(filePath), object : SimpleFileVisitor() { - override public fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult { - val rel = Paths.get(filePath).relativize(path) + val rootDir = if (File(filePath).isAbsolute) Paths.get(filePath) + else if (baseDir != null) Paths.get(baseDir, filePath) + else Paths.get(filePath) + Files.walkFileTree(rootDir, object : SimpleFileVisitor() { + override fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult { + val rel = if (baseDir != null && !baseDir.isEmpty()) Paths.get(baseDir).relativize(path) + else path if (isIncluded(includes, excludes, path)) { result.add(rel.toFile()) } 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 8035715d..7f445ca2 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 @@ -4,6 +4,7 @@ import com.beust.kobalt.Glob import com.beust.kobalt.IFileSpec import com.google.common.io.CharStreams import java.io.* +import java.nio.file.Paths import java.util.jar.JarEntry import java.util.jar.JarFile import java.util.jar.JarInputStream @@ -39,7 +40,7 @@ public class JarUtils { // Turn the found file into the local physical file that will be put in the jar file val localFile = if (File(foundFile.path).isAbsolute) File(foundFile.path) - else file.from(foundFile.path) + else File(directory, file.from(foundFile.path).path) if (!localFile.exists()) { throw AssertionError("File should exist: $localFile") @@ -174,7 +175,7 @@ class IncludedFile(val fromOriginal: From, val toOriginal: To, val specs: List - val fullFile = File(fromPath, file.path) + val fullFile = File(KFiles.joinDir(directory, fromPath, file.path)) if (! fullFile.exists()) { throw AssertionError("File should exist: $fullFile") } if (!KFiles.isExcluded(fullFile, excludes)) { - includedSpecs.add(FileSpec(file.path)) + val normalized = Paths.get(file.path).normalize().toFile().path + includedSpecs.add(FileSpec(normalized)) } else { log(2, "Not adding ${file.path} to jar file because it's excluded") } diff --git a/src/test/kotlin/com/beust/kobalt/IncludeExcludeTest.kt b/src/test/kotlin/com/beust/kobalt/IncludeExcludeTest.kt index dd021a8b..7bae8840 100644 --- a/src/test/kotlin/com/beust/kobalt/IncludeExcludeTest.kt +++ b/src/test/kotlin/com/beust/kobalt/IncludeExcludeTest.kt @@ -13,6 +13,7 @@ import java.nio.file.Files class IncludeExcludeTest : KobaltTest() { private lateinit var topDirectory: File private lateinit var directory: File + private lateinit var htmlDir: File val A1 = "A1.class" val B1 = "B1.class" @@ -20,6 +21,7 @@ class IncludeExcludeTest : KobaltTest() { val C1 = "C1.class" val C2 = "C2.class" val C3 = "C3.class" + val A_HTML = "a.html" @BeforeClass fun bc() { @@ -29,26 +31,43 @@ class IncludeExcludeTest : KobaltTest() { listOf(A1, B1, B2, C1, C2, C3).forEach { File(directory, it).createNewFile() } + + htmlDir = Files.createTempDirectory("kobaltTest-").toFile() + htmlDir.mkdirs() + File(htmlDir, A_HTML).createNewFile() + } + + @Test + fun html() { + val inc = IncludedFile(From(""), To(""), listOf(IFileSpec.GlobSpec("**html"))) + val files = inc.allFromFiles(htmlDir.path) + println("Files " + files) + Assert.assertEquals(files.size, 1) + Assert.assertEquals(files[0].path, A_HTML) } @DataProvider fun dp() : Array> = arrayOf( - arrayOf(directory, listOf("A**class", "B**class"), listOf(), listOf(A1, B1, B2)), - arrayOf(directory, listOf("A**class", "B**class"), listOf("B*class"), listOf(A1)), - arrayOf(directory, listOf("*class"), listOf("B*class"), listOf(A1, C1, C2, C3)), + arrayOf(directory, listOf("**A**class", "**B**class"), listOf(), listOf(A1, B1, B2)), + arrayOf(directory, listOf("**A**class", "**B**class"), listOf("**B*class"), listOf(A1)), + arrayOf(directory, listOf("**class"), listOf("**B*class"), listOf(A1, C1, C2, C3)), arrayOf(topDirectory, listOf("**/*class"), listOf(), listOf(A1, B1, B2, C1, C2, C3)), arrayOf(topDirectory, listOf("*class"), listOf(), listOf()), arrayOf(topDirectory, listOf("**/B*class"), listOf(), listOf(B1, B2)), - arrayOf(topDirectory, listOf("**/A*class", "**/B*class"), listOf("B*class"), + arrayOf(topDirectory, listOf("**A*class", "**B*class"), listOf("**C*class"), listOf(A1, B1, B2)), - arrayOf(topDirectory, listOf("**/A*class", "**/B*class"), listOf("**/B*class"), + arrayOf(topDirectory, listOf("**A*class", "**B*class"), listOf("**B*class"), listOf(A1)) ) @Test(dataProvider = "dp") - fun shouldInclude(root: File, includedSpec: List, excludedSpec: List, expectedFiles: List) { + fun shouldInclude(root: File, includedSpec: List, excludedSpec: List, expectedFiles: + List) { val g = IFileSpec.GlobSpec(includedSpec) - val files = g.toFiles("", root.path, excludedSpec.map { Glob(it) }) + val files = g.toFiles(null, root.path, excludedSpec.map { Glob(it) }) +// if (files.map { it.name } != expectedFiles) { +// println("FAILURE") +// } Assert.assertEquals(files.map { it.name }, expectedFiles) } diff --git a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt index 144514e6..7c8325dd 100644 --- a/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt +++ b/src/test/kotlin/com/beust/kobalt/VerifyKobaltZipTest.kt @@ -13,7 +13,7 @@ import java.util.jar.JarInputStream class VerifyKobaltZipTest : KobaltTest() { private fun verifyMainJarFile(ins: InputStream) { - assertExistsInJarInputStream(JarInputStream(ins), "com/beust/kobalt/MainKt.class", "templates/plugin.jar") + assertExistsInJarInputStream(JarInputStream(ins), "com/beust/kobalt/MainKt.class", "templates/kobaltPlugin.jar") } @Test fun verifySourceJarFile() {