M75IG7WMOCCEJTAPSDEZOZZ62IYZV6VSSDM3CTHL3LP3225LBT7QC PIXOAM2HBORGH6C4IL5EYNVZ3SZDBJT6Z5NZJIN6AMSQ3WNASHSQC 7M2QIAYK7RM2YDZ3DZMYNJQH26H4676VBINAW3VSBMJQJE4RI4MQC 6RA5UOK73WND7FXI6P4XIXMZMHN6542F2XAZJSESPF4ZLNMMRAQQC WFJ46TU4R5WDW5IDGWNGFXPRKA4QU46KVLXUBASW3QAV3JOBUNPAC GGYFPXND4VBCROZZXTKAP7Y4JOP2OOYQAFVLMUE7SLFM225EUSIAC 7L5LODGZ7AN4ZULDJZMLALD7PL6E57VZSNNSG67SFJARUJGCT47QC 37OJKSWJFDRHNWQW6P7HSZX6OWZWVNCJ2IFT42O5TANQF7VOVX6AC ISO7J5ZH5UB7NFZKTKKJQHQHCP4DWQ3F7SM2NDMVYJAGGIKDLX4QC FNNW5IEAXQ43WKB6QSQB7DFLG3Y3T5FYPXIUX7KQ2URR2GU3QLTAC FRFFQV7VNYKGCA7ZAOSRPC2HHYTAIZ6AGGR7A5QEV6QPAQGFDYGAC VBL5BQH7K5QZH3KCO4JBRDVYAN4YXYNAWETL2WVUD2PYHNZAGMTAC A7IL6I3VCB3F3QMYQFPXBL33DN5XDGGQPZIBZRHYSQBSIUBBFQJQC 5AUENX2YJVFNKZUSPEPDNLLL7TKZS2WTFC6CABWSZK2EC4MNCRQAC Q7FXTHVUPVAFMNY277C3NFJO3VXLZU5G6C6UYSD5QPURHSG3A7OQC QXUEMZ3B2FUHFUC7ZZHJMH5FVWLEMEYXUMFA6JNXTJKIVZNMRIOAC FSXHAVRFQCAUXEN6IY3D23CFKL6B5ONT6L723DWRMUOSX4SZAPOAC OMZXJL6QA6INENIEAARSWYFHOPMLTP4WRCVI646GQVJVWCH3LENQC Q35OTML226J2HZLHOCPV5OY6ZUM2XU4RZBE5E3GDWVHVFASHFEJAC 2N67RQZCVGL6GYJJLM2US4YVCEIUK25AHCLD66C7HR4PPTNUOCWAC RE4EKNSLYGCITZZEOPIRJAWTKIONGP7IY6S77BQO7JQL2CK27RZAC PGNTR2EPCZBOWI67LKY6AN5B3RGIEOQ6NTTXGODLESKDSPWV26KQC MJDBCNFHSHAR4S322TRR2L5MKXPRHDAVCN73H5WECCSOMXKHHWYQC NTRPUMVQHUIQZ6O72NJ72XFYTZWZOSDA6CSKMUCGKFVNE3KIDYYQC [2] PGNTR2EPCZBOWI67LKY6AN5B3RGIEOQ6NTTXGODLESKDSPWV26KQC[3]+FNNW5IEAXQ43WKB6QSQB7DFLG3Y3T5FYPXIUX7KQ2URR2GU3QLTAC[4]+OPFG6CZ26PPTGTH7ULLRQGZGR3YEIEJOV5W2E3WN7PFRZS62CVLQC[5]+GGYFPXND4VBCROZZXTKAP7Y4JOP2OOYQAFVLMUE7SLFM225EUSIAC[*] NTRPUMVQHUIQZ6O72NJ72XFYTZWZOSDA6CSKMUCGKFVNE3KIDYYQC
[2] PGNTR2EPCZBOWI67LKY6AN5B3RGIEOQ6NTTXGODLESKDSPWV26KQC # Improved README and ider roadmap[3]+FNNW5IEAXQ43WKB6QSQB7DFLG3Y3T5FYPXIUX7KQ2URR2GU3QLTAC # Added more plugin files to Pijul[4]+OPFG6CZ26PPTGTH7ULLRQGZGR3YEIEJOV5W2E3WN7PFRZS62CVLQC # File status tracking supported.[5]+GGYFPXND4VBCROZZXTKAP7Y4JOP2OOYQAFVLMUE7SLFM225EUSIAC # Initial plugin[*] NTRPUMVQHUIQZ6O72NJ72XFYTZWZOSDA6CSKMUCGKFVNE3KIDYYQC # Improved README and added roadmap.
+ val change = this.doExecutionWithMapper("change-""" + "\$hash" + """, this.execPijul(project, rootPath, listOf("change", hash), delay = 10L)) {
+ val change = this.doExecutionWithMapper("change-${"$"}hash", this.execPijul(project, rootPath, listOf("change", hash), delay = 10L)) {
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.revision"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.revision\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = "import java.time.LocalDateTime"),LineChange(type = LineChangeType.ADD, data = "import java.time.ZonedDateTime"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "import java.time.LocalDateTime\n"),LineChange(type = LineChangeType.ADD, data = "import java.time.ZonedDateTime\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " if (this === other) return 0"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " if (other is PijulRevisionNumber) {"),
LineChange(type = LineChangeType.ADD, data = " if (this === other) return 0\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " if (other is PijulRevisionNumber) {\n"),
LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " return -1"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " override fun asString(): String = this.hash"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " return -1\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " override fun asString(): String = this.hash\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.provider"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.progress.ProgressIndicator"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.project.Project"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.vcs.VcsKey"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.vcs.changes.*"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.provider\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.progress.ProgressIndicator\n"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.project.Project\n"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.vcs.VcsKey\n"),LineChange(type = LineChangeType.ADD, data = "import com.intellij.openapi.vcs.changes.*\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " override fun getChanges("),LineChange(type = LineChangeType.ADD, data = " dirtyScope: VcsDirtyScope,"),LineChange(type = LineChangeType.ADD, data = " builder: ChangelistBuilder,"),LineChange(type = LineChangeType.ADD, data = " progress: ProgressIndicator,"),LineChange(type = LineChangeType.ADD, data = " addGate: ChangeListManagerGate"),LineChange(type = LineChangeType.ADD, data = " ) {"),LineChange(type = LineChangeType.ADD, data = " if (project.isDisposed) return"),
LineChange(type = LineChangeType.ADD, data = " override fun getChanges(\n"),LineChange(type = LineChangeType.ADD, data = " dirtyScope: VcsDirtyScope,\n"),LineChange(type = LineChangeType.ADD, data = " builder: ChangelistBuilder,\n"),LineChange(type = LineChangeType.ADD, data = " progress: ProgressIndicator,\n"),LineChange(type = LineChangeType.ADD, data = " addGate: ChangeListManagerGate\n"),LineChange(type = LineChangeType.ADD, data = " ) {\n"),LineChange(type = LineChangeType.ADD, data = " if (project.isDisposed) return\n"),
LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " println(dirtDirs)"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " println(dirtDirs)\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " @RequiresBackgroundThread"),
LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " @RequiresBackgroundThread\n"),
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.log"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "import java.time.LocalDateTime"),LineChange(type = LineChangeType.ADD, data = "import java.time.ZonedDateTime"),LineChange(type = LineChangeType.ADD, data = "import java.time.format.DateTimeFormatter"),LineChange(type = LineChangeType.ADD, data = "import java.time.format.ResolverStyle"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "package com.github.jonathanxd.dracon.log\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "import java.time.LocalDateTime\n"),LineChange(type = LineChangeType.ADD, data = "import java.time.ZonedDateTime\n"),LineChange(type = LineChangeType.ADD, data = "import java.time.format.DateTimeFormatter\n"),LineChange(type = LineChangeType.ADD, data = "import java.time.format.ResolverStyle\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = "class PijulLog(val entries: List<PijulLogEntry>)"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "class PijulLogEntry("),LineChange(type = LineChangeType.ADD, data = " val changeHash: String,"),LineChange(type = LineChangeType.ADD, data = " val message: String,"),LineChange(type = LineChangeType.ADD, data = " val date: ZonedDateTime,"),LineChange(type = LineChangeType.ADD, data = " val authors: List<Author>"),LineChange(type = LineChangeType.ADD, data = ")"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "val MESSAGE_PATTERN = Regex(\"message = '(.*)'\\\\n\")"),LineChange(type = LineChangeType.ADD, data = "val TIME_PATTERN = Regex(\"timestamp = '(.*)'\\\\n\")"),
LineChange(type = LineChangeType.ADD, data = "class PijulLog(val entries: List<PijulLogEntry>)\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "class PijulLogEntry(\n"),LineChange(type = LineChangeType.ADD, data = " val changeHash: String,\n"),LineChange(type = LineChangeType.ADD, data = " val message: String,\n"),LineChange(type = LineChangeType.ADD, data = " val date: ZonedDateTime,\n"),LineChange(type = LineChangeType.ADD, data = " val authors: List<Author>\n"),LineChange(type = LineChangeType.ADD, data = ")\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "val MESSAGE_PATTERN = Regex(\"message = '(.*)'\\\\n\")\n"),LineChange(type = LineChangeType.ADD, data = "val TIME_PATTERN = Regex(\"timestamp = '(.*)'\\\\n\")\n"),
LineChange(type = LineChangeType.ADD, data = "val AUTHOR_PATTERN = Regex(\"name = '(.*)'\\\\n\")"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "fun String.parseChange(hash: String): PijulLogEntry {"),
LineChange(type = LineChangeType.ADD, data = "val AUTHOR_PATTERN = Regex(\"name = '(.*)'\\\\n\")\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "fun String.parseChange(hash: String): PijulLogEntry {\n"),
LineChange(type = LineChangeType.ADD, data = " val authors = mutableListOf<Author>()"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " if (authorsSection != null) {"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " var lastFound: Int? = authorsSection"),LineChange(type = LineChangeType.ADD, data = " while (lastFound != null) {"),
LineChange(type = LineChangeType.ADD, data = " val authors = mutableListOf<Author>()\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " if (authorsSection != null) {\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " var lastFound: Int? = authorsSection\n"),LineChange(type = LineChangeType.ADD, data = " while (lastFound != null) {\n"),
LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " if (foundAuthorGroup != null) {"),
LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " if (foundAuthorGroup != null) {\n"),
LineChange(type = LineChangeType.ADD, data = " null"),LineChange(type = LineChangeType.ADD, data = " } else {"),LineChange(type = LineChangeType.ADD, data = " foundAuthor.range.last"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " } else {"),LineChange(type = LineChangeType.ADD, data = " lastFound = null"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = " null\n"),LineChange(type = LineChangeType.ADD, data = " } else {\n"),LineChange(type = LineChangeType.ADD, data = " foundAuthor.range.last\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " } else {\n"),LineChange(type = LineChangeType.ADD, data = " lastFound = null\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " .withResolverStyle(ResolverStyle.LENIENT)"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = "fun String.parseAsLocalDateTime(): ZonedDateTime {"),LineChange(type = LineChangeType.ADD, data = " return ZonedDateTime.parse(this, RFC3339_FORMATTER)"),LineChange(type = LineChangeType.ADD, data = "}")
LineChange(type = LineChangeType.ADD, data = " .withResolverStyle(ResolverStyle.LENIENT)\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = "fun String.parseAsLocalDateTime(): ZonedDateTime {\n"),LineChange(type = LineChangeType.ADD, data = " return ZonedDateTime.parse(this, RFC3339_FORMATTER)\n"),LineChange(type = LineChangeType.ADD, data = "}\n")
data = "import com.github.jonathanxd.dracon.log.PijulLog"), LineChange(type = LineChangeType.ADD, data = "import com.github.jonathanxd.dracon.log.PijulLogEntry")
data = "import com.github.jonathanxd.dracon.log.PijulLog\n"), LineChange(type = LineChangeType.ADD, data = "import com.github.jonathanxd.dracon.log.PijulLogEntry\n")
LineChange(type = LineChangeType.ADD, data = " it.lines()"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " if (hashes.statusCode !is SuccessStatusCode) {"),
LineChange(type = LineChangeType.ADD, data = " it.lines()\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " if (hashes.statusCode !is SuccessStatusCode) {\n"),
data = " val change = this.doExecutionWithMapper(\"change-\$hash, this.execPijul(project, rootPath, listOf(\"change\", hash), delay = 10L)) {"
data = " val change = this.doExecutionWithMapper(\"change-\$hash\", this.execPijul(project, rootPath, listOf(\"change\", hash), delay = 10L)) {\n"
LineChange(type = LineChangeType.ADD, data = " it.parseChange(hash)"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = " it.parseChange(hash)\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
data = " override fun latestRevisionNumber(project: Project, root: VirtualFile): PijulOperationResult<PijulRevisionNumber> {"
data = " override fun latestRevisionNumber(project: Project, root: VirtualFile): PijulOperationResult<PijulRevisionNumber> {\n"
LineChange(type = LineChangeType.ADD, data = ""),LineChange(type = LineChangeType.ADD, data = " val log = this.log(project, root)"),LineChange(type = LineChangeType.ADD, data = ""),
LineChange(type = LineChangeType.ADD, data = "\n"),LineChange(type = LineChangeType.ADD, data = " val log = this.log(project, root)\n"),LineChange(type = LineChangeType.ADD, data = "\n"),
LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = " )"),LineChange(type = LineChangeType.ADD, data = " }"),LineChange(type = LineChangeType.ADD, data = "")
LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = " )\n"),LineChange(type = LineChangeType.ADD, data = " }\n"),LineChange(type = LineChangeType.ADD, data = "\n")
LineChange(type = LineChangeType.ADD, data = " PijulChangeProvider(this.project, KEY)"),LineChange(type = LineChangeType.ADD, data = "")
LineChange(type = LineChangeType.ADD, data = " PijulChangeProvider(this.project, KEY)\n"),LineChange(type = LineChangeType.ADD, data = "\n")
LineChange(type = LineChangeType.ADD, data = " exclude(group = \"org.jetbrains\")"),LineChange(type = LineChangeType.ADD, data = " }")
LineChange(type = LineChangeType.ADD, data = " exclude(group = \"org.jetbrains\")\n"),LineChange(type = LineChangeType.ADD, data = " }\n")
* Mode is ignored as it is not needed for this plugin work.** However, we still read metadata and store them, as they are useful to keep changelog reading consistent.*/data class Mode(val plain: String): Serializable {companion object {private const val serialVersionUID: Long = 1L}}/**
class PijulAsyncFileListener(val project: Project) : AsyncFileChangeListenerBase(), AsyncFileListener {private val fileStatusCache by lazy { this.project.service<FileStatusCache>() }private val pijulLogEntryChangeCache by lazy { this.project.service<PijulLogEntryChangeCache>() }private val pijulLogRevisionCache by lazy { this.project.service<PijulLogRevisionCache>() }override fun apply() {}override fun init() {
class PijulAsyncFileListener(val project: Project) : AsyncFileListener {override fun prepareChange(events: MutableList<out VFileEvent>): AsyncFileListener.ChangeApplier {val interested = events.filter { it.file != null }.filter { ProjectRootManager.getInstance(this.project).fileIndex.isInContent(it.file!!) }return ChangeApplierImpl(this.project, interested)
override fun isRelevant(file: VirtualFile, event: VFileEvent): Boolean {return ProjectRootManager.getInstance(this.project).fileIndex.isInContent(file)}
class ChangeApplierImpl(val project: Project, val events: List<VFileEvent>) : AsyncFileListener.ChangeApplier {private val fileStatusCache by lazy { this.project.service<FileStatusCache>() }private val pijulLogEntryChangeCache by lazy { this.project.service<PijulLogEntryChangeCache>() }private val pijulLogRevisionCache by lazy { this.project.service<PijulLogRevisionCache>() }
override fun updateFile(file: VirtualFile, event: VFileEvent) {if (ProjectRootManager.getInstance(this.project).fileIndex.isInContent(file)) {this.fileStatusCache.unload(Paths.get(VcsUtil.getFilePath(file).path))this.pijulLogEntryChangeCache.unload(Paths.get(VcsUtil.getFilePath(file).path))this.pijulLogRevisionCache.unload(Paths.get(VcsUtil.getFilePath(file).path))
override fun afterVfsChange() {val paths = this.events.filter { it.file != null }.map { Paths.get(VcsUtil.getFilePath(it.file!!).path) }fileStatusCache.unloadAll(paths)pijulLogEntryChangeCache.unloadAll(paths)pijulLogRevisionCache.unloadAll(paths)
}/*** Invalidates multiple keys in [cache], this is a good way to invalidate data in cache (but not the best one), as it does not* cause all the cache to be recomputed, however, if you already know the new value for the cache, or a function* to compute it, use [updateCache] function.**/fun invalidateAll(keys: Iterable<K>) {this.cache.invalidateAll(keys)
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1thendie "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
implementation("org.tomlj:tomlj:1.0.0")implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.4")implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2")implementation("org.jetbrains.kotlin:kotlin-reflect:1.5.31")
implementation("org.tomlj:tomlj:1.1.1")implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7")implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")implementation("org.jetbrains.kotlin:kotlin-reflect:1.9.23")
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.18.1")testImplementation(platform("org.junit:junit-bom:5.7.1"))
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.5")testImplementation(platform("org.junit:junit-bom:5.10.2"))
testImplementation("io.kotest:kotest-runner-junit5:4.4.3")testImplementation("io.kotest:kotest-assertions-core:4.4.3")testImplementation("io.kotest:kotest-property:4.4.3")
testImplementation("io.kotest:kotest-runner-junit5:5.8.1")testImplementation("io.kotest:kotest-assertions-core:5.8.1")testImplementation("io.kotest:kotest-property:5.8.1")