don't expose MacDistributionCustomizer — it is internal implementation detail

GitOrigin-RevId: f2b11863537e5be74c719979e168ed0cb39f76fc
This commit is contained in:
Vladimir Krivosheev
2022-09-19 14:16:14 +00:00
committed by intellij-monorepo-bot
parent 6509545109
commit c241b222fd
8 changed files with 60 additions and 63 deletions
@@ -7,15 +7,22 @@ import kotlinx.collections.immutable.PersistentList
import org.jetbrains.jps.model.module.JpsModule
import java.nio.file.Path
interface BuildContext: CompilationContext {
interface BuildContext : CompilationContext {
val productProperties: ProductProperties
val windowsDistributionCustomizer: WindowsDistributionCustomizer?
val linuxDistributionCustomizer: LinuxDistributionCustomizer?
val macDistributionCustomizer: MacDistributionCustomizer?
val proprietaryBuildTools: ProprietaryBuildTools
val applicationInfo: ApplicationInfoProperties
/**
* Relative paths to files in distribution which should take 'executable' permissions.
* No need to add *.sh.
*/
fun addExtraExecutablePattern(os: OsFamily, pattern: String)
fun getExtraExecutablePattern(os: OsFamily): List<String>
/**
* Build number without product code (e.g. '162.500.10')
*/
@@ -5,10 +5,11 @@ import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import org.jetbrains.intellij.build.impl.support.RepairUtilityBuilder
import java.nio.file.Path
import java.util.concurrent.atomic.AtomicReference
import java.util.function.Predicate
abstract class MacDistributionCustomizer {
abstract class MacDistributionCustomizer(
val extraExecutables: List<String> = emptyList(),
) {
/**
* Path to icns file containing product icon bundle for macOS distribution
* For full description of icns files see <a href="https://en.wikipedia.org/wiki/Apple_Icon_Image_format">Apple Icon Image Format</a>
@@ -79,24 +80,6 @@ abstract class MacDistributionCustomizer {
*/
var associateIpr = false
/**
* Relative paths to files in macOS distribution which should take 'executable' permissions
*/
private var extraExecutablesRef = AtomicReference<PersistentList<String>>(persistentListOf())
// use setter only if you configure build context first time
var extraExecutables: PersistentList<String>
get() = extraExecutablesRef.get()
set(value) {
extraExecutablesRef.set(value)
}
// thread-safe
fun addExtraExecutable(path: String) {
extraExecutablesRef.updateAndGet { it.add(path) }
}
/**
* Filter for files that is going to be put to `<distribution>/bin` directory.
*/
@@ -1,5 +1,5 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
@file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog")
@file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog", "ReplaceGetOrSet")
package org.jetbrains.intellij.build.impl
@@ -8,8 +8,7 @@ import com.intellij.openapi.util.text.Strings
import io.opentelemetry.api.common.AttributeKey
import io.opentelemetry.api.common.Attributes
import io.opentelemetry.api.trace.Span
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.collections.immutable.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import org.jetbrains.intellij.build.*
@@ -27,15 +26,19 @@ import java.nio.file.Files
import java.nio.file.Path
import java.util.*
import java.util.concurrent.ConcurrentLinkedQueue
import java.util.concurrent.atomic.AtomicReference
class BuildContextImpl private constructor(private val compilationContext: CompilationContextImpl,
override val productProperties: ProductProperties,
override val windowsDistributionCustomizer: WindowsDistributionCustomizer?,
override val linuxDistributionCustomizer: LinuxDistributionCustomizer?,
override val macDistributionCustomizer: MacDistributionCustomizer?,
override val proprietaryBuildTools: ProprietaryBuildTools = ProprietaryBuildTools.DUMMY,
private val distFiles: ConcurrentLinkedQueue<Map.Entry<Path, String>>) : BuildContext {
class BuildContextImpl private constructor(
private val compilationContext: CompilationContextImpl,
override val productProperties: ProductProperties,
override val windowsDistributionCustomizer: WindowsDistributionCustomizer?,
override val linuxDistributionCustomizer: LinuxDistributionCustomizer?,
internal val macDistributionCustomizer: MacDistributionCustomizer?,
override val proprietaryBuildTools: ProprietaryBuildTools = ProprietaryBuildTools.DUMMY
) : BuildContext {
private val distFiles = ConcurrentLinkedQueue<Map.Entry<Path, String>>()
private val extraExecutablePatterns = AtomicReference<PersistentMap<OsFamily, PersistentList<String>>>(persistentHashMapOf())
override val fullBuildNumber: String
get() = "${applicationInfo.productCode}-$buildNumber"
@@ -117,8 +120,7 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
windowsDistributionCustomizer = windowsDistributionCustomizer,
linuxDistributionCustomizer = linuxDistributionCustomizer,
macDistributionCustomizer = macDistributionCustomizer,
proprietaryBuildTools = proprietaryBuildTools,
distFiles = ConcurrentLinkedQueue())
proprietaryBuildTools = proprietaryBuildTools)
}
}
@@ -150,6 +152,7 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
override val options: BuildOptions
get() = compilationContext.options
@Suppress("SSBasedInspection")
override val messages: BuildMessages
get() = compilationContext.messages
@@ -260,7 +263,6 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
linuxDistributionCustomizer = productProperties.createLinuxCustomizer(projectHomeForCustomizersAsString),
macDistributionCustomizer = productProperties.createMacCustomizer(projectHomeForCustomizersAsString),
proprietaryBuildTools = proprietaryBuildTools,
distFiles = ConcurrentLinkedQueue()
)
@Suppress("DEPRECATION") val productCode = productProperties.productCode
copy.paths.artifactDir = paths.artifactDir.resolve(productCode!!)
@@ -298,6 +300,14 @@ class BuildContextImpl private constructor(private val compilationContext: Compi
jvmArgs.addAll(getCommandLineArgumentsForOpenPackages(this, os))
return jvmArgs
}
override fun addExtraExecutablePattern(os: OsFamily, pattern: String) {
extraExecutablePatterns.updateAndGet { prev ->
prev.put(os, (prev.get(os) ?: persistentListOf()).add(pattern))
}
}
override fun getExtraExecutablePattern(os: OsFamily): List<String> = extraExecutablePatterns.get().get(os) ?: emptyList()
}
private fun createBuildOutputRootEvaluator(projectHome: Path,
@@ -56,7 +56,9 @@ import java.util.function.BiConsumer
import java.util.function.Predicate
import java.util.stream.Collectors
class BuildTasksImpl(private val context: BuildContext) : BuildTasks {
class BuildTasksImpl(context: BuildContext) : BuildTasks {
private val context = context as BuildContextImpl
override suspend fun zipSourcesOfModules(modules: List<String>, targetFile: Path, includeLibraries: Boolean) {
zipSourcesOfModules(modules = modules, targetFile = targetFile, includeLibraries = includeLibraries, context = context)
}
@@ -614,14 +616,16 @@ private suspend fun compileModulesForDistribution(pluginsToPublish: Set<PluginLa
}
private suspend fun compileModulesForDistribution(context: BuildContext): DistributionBuilderState {
val pluginsToPublish = getPluginsByModules(context.productProperties.productLayout.pluginModulesToPublish, context)
return compileModulesForDistribution(pluginsToPublish, context)
return compileModulesForDistribution(
pluginsToPublish = getPluginsByModules(modules = context.productProperties.productLayout.pluginModulesToPublish, context = context),
context = context
)
}
suspend fun buildDistributions(context: BuildContext) {
try {
spanBuilder("build distributions").useWithScope2 {
checkProductProperties(context)
checkProductProperties(context as BuildContextImpl)
copyDependenciesFile(context)
logFreeDiskSpace("before compilation", context)
val pluginsToPublish = getPluginsByModules(context.productProperties.productLayout.pluginModulesToPublish, context)
@@ -731,7 +735,7 @@ private fun CoroutineScope.createMavenArtifactJob(context: BuildContext, distrib
}
}
private fun checkProductProperties(context: BuildContext) {
private fun checkProductProperties(context: BuildContextImpl) {
checkProductLayout(context)
val properties = context.productProperties
@@ -1065,7 +1069,9 @@ fun getOsDistributionBuilder(os: OsFamily, ideaProperties: Path? = null, context
OsFamily.LINUX -> LinuxDistributionBuilder(context = context,
customizer = context.linuxDistributionCustomizer ?: return null,
ideaProperties = ideaProperties)
OsFamily.MACOS -> MacDistributionBuilder(context, context.macDistributionCustomizer ?: return null, ideaProperties)
OsFamily.MACOS -> MacDistributionBuilder(context = context,
customizer = (context as BuildContextImpl).macDistributionCustomizer ?: return null,
ideaProperties = ideaProperties)
}
}
@@ -4,6 +4,7 @@ package org.jetbrains.intellij.build.impl
import com.intellij.diagnostic.telemetry.use
import com.intellij.openapi.util.SystemInfoRt
import com.intellij.openapi.util.io.NioFiles
import kotlinx.collections.immutable.persistentListOf
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream
import org.jetbrains.intellij.build.*
import org.jetbrains.intellij.build.dependencies.BuildDependenciesDownloader
@@ -24,7 +25,6 @@ class BundledRuntimeImpl(
private val error: (String) -> Unit,
private val info: (String) -> Unit) : BundledRuntime {
companion object {
@JvmStatic
fun getProductPrefix(context: BuildContext): String {
return context.options.bundledRuntimePrefix ?: context.productProperties.runtimeDistribution.artifactPrefix
}
@@ -124,14 +124,14 @@ class BundledRuntimeImpl(
override fun executableFilesPatterns(os: OsFamily): List<String> {
val pathPrefix = if (os == OsFamily.MACOS) "jbr/Contents/Home/" else "jbr/"
@Suppress("SpellCheckingInspection")
val executableFilesPatterns = mutableListOf(
var executableFilesPatterns = persistentListOf(
pathPrefix + "bin/*",
pathPrefix + "lib/jexec",
pathPrefix + "lib/jspawnhelper",
pathPrefix + "lib/chrome-sandbox"
)
if (os == OsFamily.LINUX) {
executableFilesPatterns += "jbr/lib/jcef_helper"
executableFilesPatterns = executableFilesPatterns.add("jbr/lib/jcef_helper")
}
return executableFilesPatterns
}
@@ -9,6 +9,7 @@ import com.intellij.openapi.util.io.NioFiles
import io.opentelemetry.api.common.AttributeKey
import io.opentelemetry.api.common.Attributes
import io.opentelemetry.api.trace.Span
import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.jetbrains.intellij.build.*
@@ -129,13 +130,12 @@ class LinuxDistributionBuilder(override val context: BuildContext,
}
override fun generateExecutableFilesPatterns(includeRuntime: Boolean): List<String> {
val patterns = ArrayList<String>()
patterns.addAll(listOf("bin/*.sh", "bin/*.py", "bin/fsnotifier*", "bin/remote-dev-server.sh"))
patterns.addAll(customizer.extraExecutables)
var patterns = persistentListOf("bin/*.sh", "plugins/**/*.sh", "bin/*.py", "bin/fsnotifier*")
.addAll(customizer.extraExecutables)
if (includeRuntime) {
patterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.LINUX))
patterns = patterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.LINUX))
}
return patterns
return patterns.addAll(context.getExtraExecutablePattern(OsFamily.LINUX))
}
override fun getArtifactNames(context: BuildContext): List<String> {
@@ -325,18 +325,6 @@ private fun makeFileExecutable(file: Path) {
Files.setPosixFilePermissions(file, PosixFilePermissions.fromString("rwxr-xr-x"))
}
fun copyFileSymlinkAware(source: Path, target: Path) {
target.parent?.let { Files.createDirectories(it) }
if (Files.isSymbolicLink(source)) {
// append 'NOFOLLOW_LINKS' copy option to be able to copy symbolic links
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING, LinkOption.NOFOLLOW_LINKS)
}
else {
Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING, LinkOption.NOFOLLOW_LINKS)
}
}
internal const val REMOTE_DEV_SCRIPT_FILE_NAME = "remote-dev-server.sh"
internal fun generateUnixScripts(context: BuildContext,
@@ -343,6 +343,7 @@ class MacDistributionBuilder(override val context: BuildContext,
override fun generateExecutableFilesPatterns(includeRuntime: Boolean): List<String> {
var executableFilePatterns = persistentListOf(
"bin/*.sh",
"plugins/**/*.sh",
"bin/*.py",
"bin/fsnotifier",
"bin/printenv",
@@ -353,7 +354,9 @@ class MacDistributionBuilder(override val context: BuildContext,
if (includeRuntime) {
executableFilePatterns = executableFilePatterns.addAll(context.bundledRuntime.executableFilesPatterns(OsFamily.MACOS))
}
return executableFilePatterns.addAll(customizer.extraExecutables)
return executableFilePatterns
.addAll(customizer.extraExecutables)
.addAll(context.getExtraExecutablePattern(OsFamily.MACOS))
}
private suspend fun buildForArch(builtinModule: BuiltinModulesFileData?,
@@ -5,7 +5,7 @@ import org.jetbrains.intellij.build.ApplicationInfoProperties
import org.jetbrains.intellij.build.BuildContext
import org.jetbrains.intellij.build.MacDistributionCustomizer
open class PyCharmMacDistributionCustomizer : MacDistributionCustomizer() {
open class PyCharmMacDistributionCustomizer(extraExecutables: List<String> = emptyList()) : MacDistributionCustomizer(extraExecutables = extraExecutables) {
override fun copyAdditionalFiles(context: BuildContext, targetDirectory: String) {
super.copyAdditionalFiles(context, targetDirectory)
PyCharmBuildUtils.copySkeletons(context, targetDirectory, "skeletons-mac*.zip")