fun run()

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)
            }
        }
    }