Store relative paths in JPS caches if possible
So caches can be relocated from one machine to another
This commit is contained in:
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
|
import org.jetbrains.jps.model.JpsProject
|
||||||
|
import org.jetbrains.jps.model.serialization.JpsModelSerializationDataService
|
||||||
|
import org.jetbrains.kotlin.incremental.storage.SourceFileToPathConverter
|
||||||
|
import java.io.File
|
||||||
|
|
||||||
|
private const val PROJECT_DIR_PLACEHOLDER = "${'$'}PROJECT_DIR$"
|
||||||
|
|
||||||
|
internal class JpsSourceFileToPathConverter(jpsProject: JpsProject) : SourceFileToPathConverter {
|
||||||
|
private val baseDirPath = JpsModelSerializationDataService
|
||||||
|
.getBaseDirectory(jpsProject)?.canonicalFile?.invariantSeparatorsPath
|
||||||
|
|
||||||
|
override fun toPath(file: File): String {
|
||||||
|
val path = file.canonicalFile.invariantSeparatorsPath
|
||||||
|
return when {
|
||||||
|
baseDirPath != null && path.startsWith(baseDirPath) ->
|
||||||
|
PROJECT_DIR_PLACEHOLDER + path.substring(baseDirPath.length)
|
||||||
|
else -> path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toFile(path: String): File =
|
||||||
|
when {
|
||||||
|
path.startsWith(PROJECT_DIR_PLACEHOLDER) -> {
|
||||||
|
val basePath = baseDirPath ?: error("Could not get project root dir")
|
||||||
|
File(basePath + path.substring(PROJECT_DIR_PLACEHOLDER.length))
|
||||||
|
}
|
||||||
|
else -> File(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,6 +12,7 @@ import org.jetbrains.jps.incremental.GlobalContextKey
|
|||||||
import org.jetbrains.jps.incremental.fs.CompilationRound
|
import org.jetbrains.jps.incremental.fs.CompilationRound
|
||||||
import org.jetbrains.jps.incremental.messages.BuildMessage
|
import org.jetbrains.jps.incremental.messages.BuildMessage
|
||||||
import org.jetbrains.jps.incremental.messages.CompilerMessage
|
import org.jetbrains.jps.incremental.messages.CompilerMessage
|
||||||
|
import org.jetbrains.jps.model.serialization.JpsModelSerializationDataService
|
||||||
import org.jetbrains.kotlin.config.CompilerRunnerConstants
|
import org.jetbrains.kotlin.config.CompilerRunnerConstants
|
||||||
import org.jetbrains.kotlin.incremental.LookupSymbol
|
import org.jetbrains.kotlin.incremental.LookupSymbol
|
||||||
import org.jetbrains.kotlin.incremental.storage.SourceFileToCanonicalPathConverter
|
import org.jetbrains.kotlin.incremental.storage.SourceFileToCanonicalPathConverter
|
||||||
@@ -68,7 +69,8 @@ class KotlinCompileContext(val jpsContext: CompileContext) {
|
|||||||
|
|
||||||
val hasKotlinMarker = HasKotlinMarker(dataManager)
|
val hasKotlinMarker = HasKotlinMarker(dataManager)
|
||||||
|
|
||||||
val sourceFileToPathConverter: SourceFileToPathConverter = SourceFileToCanonicalPathConverter
|
val sourceFileToPathConverter: SourceFileToPathConverter =
|
||||||
|
JpsSourceFileToPathConverter(jpsContext.projectDescriptor.project)
|
||||||
|
|
||||||
val lookupStorageManager = JpsLookupStorageManager(dataManager, sourceFileToPathConverter)
|
val lookupStorageManager = JpsLookupStorageManager(dataManager, sourceFileToPathConverter)
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.jps.incremental
|
|||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
private val NORMAL_VERSION = 11
|
private val NORMAL_VERSION = 12
|
||||||
private val NORMAL_VERSION_FILE_NAME = "format-version.txt"
|
private val NORMAL_VERSION_FILE_NAME = "format-version.txt"
|
||||||
|
|
||||||
fun localCacheVersionManager(dataRoot: File, isCachesEnabled: Boolean) =
|
fun localCacheVersionManager(dataRoot: File, isCachesEnabled: Boolean) =
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.jps.incremental
|
|||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
private val DATA_CONTAINER_VERSION_FILE_NAME = "data-container-format-version.txt"
|
private val DATA_CONTAINER_VERSION_FILE_NAME = "data-container-format-version.txt"
|
||||||
private val DATA_CONTAINER_VERSION = 4
|
private val DATA_CONTAINER_VERSION = 5
|
||||||
|
|
||||||
fun lookupsCacheVersionManager(dataRoot: File, isEnabled: Boolean) =
|
fun lookupsCacheVersionManager(dataRoot: File, isEnabled: Boolean) =
|
||||||
CacheVersionManager(
|
CacheVersionManager(
|
||||||
|
|||||||
Reference in New Issue
Block a user