in src/main/kotlin/org/jetbrains/changelog/tasks/PatchChangelogTask.kt [86:147]
fun run() {
with(changelog.get()) {
val releaseNoteContent = releaseNoteFilePath?.let { File(it) }?.readText() ?: releaseNote
val preReleaseItems = releasedItems
.filter {
val current = Version.parse(version.get())
with(Version.parse(it.version)) {
current.major == major && current.minor == minor && current.patch == patch
}
}
.takeIf { combinePreReleases.get() }
.orEmpty()
val newItem = (unreleasedItem ?: newUnreleasedItem).copy(
version = version.get(),
header = header.get(),
isUnreleased = false,
).let {
parseTree(releaseNoteContent)?.let { releaseNoteTree ->
val (summary, items) = releaseNoteTree.children.extractItemData(releaseNoteContent)
val links = releaseNoteTree.children.extractLinks(releaseNoteContent)
baseLinks.addAll(links)
it.copy(
summary = summary,
items = items,
)
} ?: it
} + preReleaseItems
if (newItem.summary.isEmpty() && newItem.sections.all { it.value.isEmpty() }) {
if (patchEmpty.get()) {
logger.info(":patchChangelog task skipped due to the missing release note in the '${unreleasedTerm.get()}'.")
throw StopActionException()
}
throw MissingReleaseNoteException(
":patchChangelog task requires release note to be provided. " +
"Add '$ATX_2 ${unreleasedTerm.get()}' section header with release notes to your changelog file: " +
"'${inputFile.get().asFile.canonicalPath}' or provide it using '--release-note' CLI option."
)
}
items = buildList {
if (keepUnreleasedSection.get()) {
add(unreleasedTerm.get() to newUnreleasedItem)
}
add(newItem.version to newItem)
releasedItems.forEach {
add(it.version to it)
}
}.toMap(LinkedHashMap())
render(Changelog.OutputType.MARKDOWN).let {
outputFile.get()
.asFile
.writeText(it)
}
}
}