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

Fix source jar file.

This commit is contained in:
Cedric Beust 2016-02-18 01:44:47 +04:00
parent 2f840a44fd
commit 986f1b01be
7 changed files with 49 additions and 30 deletions

View file

@ -10,10 +10,10 @@ import java.nio.file.attribute.BasicFileAttributes
* and GlobSpec (a spec defined by a glob, e.g. ** slash *Test.class)
*/
sealed class IFileSpec {
abstract fun toFiles(filePath: String, excludes: List<Glob> = emptyList<Glob>()): List<File>
abstract fun toFiles(baseDir: String?, filePath: String, excludes: List<Glob> = emptyList<Glob>()): List<File>
class FileSpec(val spec: String) : IFileSpec() {
override public fun toFiles(filePath: String, excludes: List<Glob>) = listOf(File(spec))
override public fun toFiles(baseDir: String?, filePath: String, excludes: List<Glob>) = listOf(File(spec))
override public fun toString() = spec
}
@ -30,14 +30,14 @@ sealed class IFileSpec {
}
}
if (includeMatchers.matches(rel)) {
log(2, "Including ${rel.toFile().absolutePath}")
log(2, "Including ${rel.toFile().path}")
return true
}
log(2, "Excluding ${rel.toFile()} (not matching any include pattern")
return false
}
override fun toFiles(filePath: String, excludes: List<Glob>): List<File> {
override fun toFiles(baseDir: String?, filePath: String, excludes: List<Glob>): List<File> {
val result = arrayListOf<File>()
val includes = Glob(*spec.toTypedArray())
@ -45,7 +45,7 @@ sealed class IFileSpec {
Files.walkFileTree(Paths.get(filePath), object : SimpleFileVisitor<Path>() {
override public fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult {
val rel = Paths.get(filePath).relativize(path)
if (isIncluded(includes, excludes, rel)) {
if (isIncluded(includes, excludes, path)) {
result.add(rel.toFile())
}
return FileVisitResult.CONTINUE

View file

@ -24,10 +24,10 @@ abstract class GenericTestRunner : ITestRunnerContributor {
else 0
protected fun findTestClasses(project: Project, testConfig: TestConfig): List<String> {
val path = KFiles.joinDir(project.directory, project.buildDirectory, KFiles.TEST_CLASSES_DIR)
val path = KFiles.joinDir(project.buildDirectory, KFiles.TEST_CLASSES_DIR)
val result = IFileSpec.GlobSpec(toClassPaths(testConfig.testIncludes))
.toFiles(path, testConfig.testExcludes.map {
.toFiles(project.directory, path, testConfig.testExcludes.map {
Glob(it)
}).map {
it.toString().replace("/", ".").replace("\\", ".").replace(".class", "")

View file

@ -36,9 +36,16 @@ public class JarUtils {
expandJarFiles: Boolean, onError: (Exception) -> Unit = DEFAULT_HANDLER) {
val allFiles = file.allFromFiles(directory)
allFiles.forEach { relSource ->
val source =
if (relSource.isAbsolute) relSource
else File(KFiles.joinDir(directory, file.from, relSource.path))
val source = relSource
val entryFile = if (File(source.path).isAbsolute) File(source.path)
else if (! file.fromOriginal.isCurrentDir()) File(KFiles.joinDir(file.from, source.path))
else File(source.path)
if (!entryFile.exists()) {
throw AssertionError("File should exist: $entryFile")
}
if (source.isDirectory) {
log(2, "Writing contents of directory $source")
@ -61,22 +68,21 @@ public class JarUtils {
} else {
if (expandJarFiles && source.name.endsWith(".jar") && ! source.path.contains("resources")) {
log(2, "Writing contents of jar file $source")
val stream = JarInputStream(FileInputStream(source))
val stream = JarInputStream(FileInputStream(entryFile))
var entry = stream.nextEntry
while (entry != null) {
if (!entry.isDirectory && !KFiles.isExcluded(entry.name, DEFAULT_JAR_EXCLUDES)) {
val ins = JarFile(source).getInputStream(entry)
val ins = JarFile(entryFile).getInputStream(entry)
addEntry(ins, JarEntry(entry), outputStream, onError)
}
entry = stream.nextEntry
}
} else {
val entry = JarEntry(file.to + relSource.path.replace("\\", "/"))
val fixedSource = relSource.path.replace("\\", "/")
val entryFileName = if (file.toOriginal.isCurrentDir()) fixedSource
else file.to + fixedSource
val entry = JarEntry(entryFileName)
entry.time = source.lastModified()
val entryFile = source
if (!entryFile.exists()) {
throw AssertionError("File should exist: $entryFile")
}
addEntry(FileInputStream(entryFile), entry, outputStream, onError)
}
}
@ -143,8 +149,12 @@ public class JarUtils {
}
open class Direction(open val p: String) {
override public fun toString() = path
public val path: String get() = if (p.isEmpty() or p.endsWith("/")) p else p + "/"
override fun toString() = path
fun isCurrentDir() = path == "./"
val path: String get() =
if (p.isEmpty()) "./"
else if (p.startsWith("/") || p.endsWith("/")) p
else p + "/"
}
class IncludedFile(val fromOriginal: From, val toOriginal: To, val specs: List<IFileSpec>) {
@ -159,8 +169,8 @@ class IncludedFile(val fromOriginal: From, val toOriginal: To, val specs: List<I
fun allFromFiles(directory: String? = null): List<File> {
val result = arrayListOf<File>()
specs.forEach { spec ->
val fullDir = if (directory == null) from else KFiles.joinDir(directory, from)
spec.toFiles(fullDir).forEach { source ->
// val fullDir = if (directory == null) from else KFiles.joinDir(directory, from)
spec.toFiles(directory, from).forEach { source ->
result.add(if (source.isAbsolute) source else File(source.path))
}
}