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

Fix inclusion bug.

This commit is contained in:
Cedric Beust 2016-02-19 02:01:40 +04:00
parent a574bc1adf
commit 2f386a622d
6 changed files with 44 additions and 17 deletions

View file

@ -42,9 +42,13 @@ sealed class IFileSpec {
val includes = Glob(*spec.toTypedArray())
if (File(filePath).isDirectory) {
Files.walkFileTree(Paths.get(filePath), object : SimpleFileVisitor<Path>() {
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<Path>() {
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())
}

View file

@ -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<I
result.add(if (source.isAbsolute) source else File(source.path))
}
}
return result
return result.map { Paths.get(it.path).normalize().toFile()}
}
}

View file

@ -38,7 +38,7 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
filesNotExcluded.forEach {
fileSpecs.add(IFileSpec.FileSpec(it.path.toString().substring(prefixPath.toString().length + 1)))
}
result.add(IncludedFile(From(project.directory + "/" + prefixPath.toString() + "/"), To(""), fileSpecs))
result.add(IncludedFile(From(prefixPath.toString()), To(""), fileSpecs))
// Resources, if applicable
context.variant.resourceDirectories(project).forEach {
@ -48,7 +48,8 @@ class JarGenerator @Inject constructor(val dependencyManager: DependencyManager)
//
// The user specified an include, just use it verbatim
//
result.addAll(PackagingPlugin.findIncludedFiles(project.directory, jar.includedFiles, jar.excludes))
val includedFiles = PackagingPlugin.findIncludedFiles(project.directory, jar.includedFiles, jar.excludes)
result.addAll(includedFiles)
}
//

View file

@ -14,6 +14,7 @@ import com.beust.kobalt.misc.*
import java.io.File
import java.io.FileOutputStream
import java.io.OutputStream
import java.nio.file.Paths
import java.util.*
import java.util.zip.ZipOutputStream
import javax.inject.Inject
@ -51,13 +52,14 @@ class PackagingPlugin @Inject constructor(val dependencyManager : DependencyMana
val fromPath = includedFile.from
if (File(fromPath).exists()) {
spec.toFiles(directory, fromPath).forEach { file ->
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")
}

View file

@ -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<Array<out Any?>> = arrayOf(
arrayOf(directory, listOf("A**class", "B**class"), listOf<String>(), 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<String>(), 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<String>(), listOf(A1, B1, B2, C1, C2, C3)),
arrayOf(topDirectory, listOf("*class"), listOf<String>(), listOf<String>()),
arrayOf(topDirectory, listOf("**/B*class"), listOf<String>(), 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<String>, excludedSpec: List<String>, expectedFiles: List<String>) {
fun shouldInclude(root: File, includedSpec: List<String>, excludedSpec: List<String>, expectedFiles:
List<String>) {
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)
}

View file

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