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:
parent
2f840a44fd
commit
986f1b01be
7 changed files with 49 additions and 30 deletions
|
@ -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
|
||||
|
|
|
@ -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", "")
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue