1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #!/usr/bin/env kotlin
- //install kotlin compiler: https://kotlinlang.org/docs/tutorials/command-line.html
- import java.io.File
- val includeRegex = Regex("include\\(\"(.*?)\"\\)")
- val projectRegex = "project\\(\"([^\"]+)\"(, configuration = \".*\")?\\)".toRegex()
- val keepModules = mutableSetOf<Module>()
- var root = ""
- main(args)
- fun main(args: Array<String>) {
- if (args.isEmpty()) {
- println("Usage: ./docs/contributing/selectModules.kts instrumentation/spring/spring-boot-autoconfigure/ <module to include2> ...")
- return
- }
- (args.map {
- moduleOfArg(
- File(File(it).absolutePath),
- "/" + it.trimStart('.', '/').trimEnd('/')
- )
- } + listOf(":javaagent"))
- .map { Module(it) }
- .forEach(Module::addSelfAndChildren)
- File("$root/conventions/src/main/kotlin").listFiles()!!
- .filter { it.name.endsWith(".kts") }
- .forEach {
- children(it).forEach(Module::addSelfAndChildren)
- }
- println("removing modules except:\n${keepModules.map { it.name }.sorted().joinToString("\n")}")
- val target = File("$root/settings.gradle.kts")
- val text = target.readText().lines().flatMap { line ->
- includeRegex.matchEntire(line)?.let { it.groupValues[1] }?.let { module ->
- if (Module(module) in keepModules) {
- listOf(line)
- } else {
- emptyList()
- }
- } ?: listOf(line)
- }.joinToString("\n")
- target.writeText(text)
- }
- data class Module(val name: String) {
- fun children(): List<Module> {
- val file = moduleFile()
- return children(file)
- }
- private fun moduleFile(): File = File("$root/${name.replace(":", "/")}/build.gradle.kts")
- fun addSelfAndChildren() {
- if (!keepModules.add(this)) {
- return
- }
- children().forEach(Module::addSelfAndChildren)
- }
- }
- fun moduleOfArg(file: File, name: String): String {
- val settings = File(file, "settings.gradle.kts")
- return if (settings.exists()) {
- root = file.absolutePath
- name.substringAfter(root).replace("/", ":")
- } else {
- moduleOfArg(file.parentFile, name)
- }
- }
- fun children(file: File) = file.readText().lines().flatMap { line ->
- projectRegex.find(line)?.let { it.groupValues[1] }?.let { module ->
- listOf(Module(module))
- } ?: emptyList()
- }
|