diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/mappings/generateMappings.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/mappings/generateMappings.kt index 76ee7362eb19..e6b7c0e309c6 100644 --- a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/mappings/generateMappings.kt +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/mappings/generateMappings.kt @@ -5,10 +5,7 @@ import com.intellij.openapi.application.PathManager import org.jetbrains.intellij.build.images.IconsClassGenerator import org.jetbrains.intellij.build.images.ImageCollector import org.jetbrains.intellij.build.images.isImage -import org.jetbrains.intellij.build.images.sync.Context -import org.jetbrains.intellij.build.images.sync.isAncestorOf -import org.jetbrains.intellij.build.images.sync.isValidIcon -import org.jetbrains.intellij.build.images.sync.protectStdErr +import org.jetbrains.intellij.build.images.sync.* import org.jetbrains.jps.model.serialization.JpsSerializationManager import java.io.File import java.nio.file.FileVisitResult @@ -24,7 +21,7 @@ fun main() = generateMappings() private fun generateMappings() { val mappings = (loadIdeaGeneratedIcons() + loadNonGeneratedIcons("idea")).groupBy { "${it.product}#${it.set}" - }.values.flatMap { + }.toSortedMap().values.flatMap { if (it.size > 1) { System.err.println("Duplicates were generated $it\nRenaming") it.subList(1, it.size).mapIndexed { i, duplicate -> @@ -36,13 +33,29 @@ private fun generateMappings() { val mappingsJson = mappings.joinToString(separator = ",\n") { it.toString().prependIndent(" ") } - println(""" + val json = """ |{ | "mappings": [ |$mappingsJson | ] |} - """.trimMargin()) + """.trimMargin() + val path = File(System.getProperty("mappings.json.path") ?: error("Specify mappings.json.path")) + val repo = findGitRepoRoot(path) + fun String.normalize() = replace(Regex("\\s+"), " ").trim() + if (json.normalize() == path.readText().normalize()) { + println("Update is not required") + } + else { + val branch = System.getProperty("branch") ?: "icons-mappings-update" + withUser(repo, "MappingsUpdater", "mappings-updater-no-reply@jetbrains.com") { + execute(repo, GIT, "checkout", "-B", branch, "origin/master") + path.writeText(json) + val jsonFile = path.toRelativeString(repo) + stageFiles(listOf(jsonFile), repo) + commitAndPush(repo, "refs/heads/$branch", "$jsonFile automatic update") + } + } } private class Mapping(val product: String, val set: String, val path: String) { diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/gitUtils.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/gitUtils.kt index de2bd17acc54..a8b67fa99213 100644 --- a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/gitUtils.kt +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/gitUtils.kt @@ -6,7 +6,7 @@ import java.io.IOException import java.util.stream.Collectors import java.util.stream.Stream -private val GIT = (System.getenv("TEAMCITY_GIT_PATH") ?: System.getenv("GIT") ?: "git").also { +internal val GIT = (System.getenv("TEAMCITY_GIT_PATH") ?: System.getenv("GIT") ?: "git").also { val noGitFound = "Git is not found, please specify path to git executable in TEAMCITY_GIT_PATH or GIT or add it to PATH" try { val gitVersion = execute(null, it, "--version") @@ -136,9 +136,8 @@ private fun splitAndTry(factor: Int, files: List, repo: File, block: (fi } internal fun commitAndPush(repo: File, branch: String, message: String): String { - execute(repo, GIT, "checkout", "-B", branch) execute(repo, GIT, "commit", "-m", message) - push(repo, "$branch:$branch") + push(repo, "+$branch:$branch") return commitInfo(repo)?.hash ?: error("Unable to read last commit") } diff --git a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/reportUtils.kt b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/reportUtils.kt index b457be5458a8..aec89549172e 100644 --- a/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/reportUtils.kt +++ b/platform/build-scripts/icons/src/org/jetbrains/intellij/build/images/sync/reportUtils.kt @@ -251,10 +251,10 @@ private val reposMapGuard = Any() internal fun findRepo(file: File): File { if (!reposMap.containsKey(file)) synchronized(reposMapGuard) { if (!reposMap.containsKey(file)) { - reposMap += file to findGitRepoRoot(file, silent = true) + reposMap = reposMap + (file to findGitRepoRoot(file, silent = true)) } } - return reposMap[file]!! + return reposMap.getValue(file) } private fun findCommits(context: Context, root: File, changes: Changes) = changes.all() @@ -281,6 +281,7 @@ private fun commitAndPush(branch: String, message: String, repos: Collection) = repos.parallelStream().map { withUser(it, user, email) { + execute(it, GIT, "checkout", "-B", branch) commitAndPush(it, branch, message) } }.toList()