in src/main/kotlin/io/bazel/kotlin/builder/utils/jars/JarCreator.kt [95:141]
fun addDirectory(directory: Path) {
if (!Files.exists(directory)) {
throw IllegalArgumentException("directory does not exist: $directory")
}
try {
Files.walkFileTree(
directory,
object : SimpleFileVisitor<Path>() {
@Throws(IOException::class)
override fun preVisitDirectory(path: Path, attrs: BasicFileAttributes): FileVisitResult {
if (path != directory) {
// For consistency with legacy behaviour, include entries for directories except for
// the root.
addEntry(path, /* isDirectory= */ true)
}
return FileVisitResult.CONTINUE
}
@Throws(IOException::class)
override fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult {
addEntry(path, /* isDirectory= */ false)
return FileVisitResult.CONTINUE
}
fun addEntry(path: Path, isDirectory: Boolean) {
val sb = StringBuilder()
var first = true
for (entry in directory.relativize(path)) {
if (!first) {
// use `/` as the directory separator for jar paths, even on Windows
sb.append('/')
}
sb.append(entry.fileName)
first = false
}
if (isDirectory) {
sb.append('/')
}
jarEntries[sb.toString()] = path
}
}
)
} catch (e: IOException) {
throw UncheckedIOException(e)
}
}