Store relative paths in JPS caches if possible

So caches can be relocated from one machine to another
This commit is contained in:
Alexey Tsvetkov
2019-04-10 16:19:15 +03:00
parent 00de7b6c44
commit 61fbe43a3f
4 changed files with 41 additions and 3 deletions
@@ -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.messages.BuildMessage
import org.jetbrains.jps.incremental.messages.CompilerMessage
import org.jetbrains.jps.model.serialization.JpsModelSerializationDataService
import org.jetbrains.kotlin.config.CompilerRunnerConstants
import org.jetbrains.kotlin.incremental.LookupSymbol
import org.jetbrains.kotlin.incremental.storage.SourceFileToCanonicalPathConverter
@@ -68,7 +69,8 @@ class KotlinCompileContext(val jpsContext: CompileContext) {
val hasKotlinMarker = HasKotlinMarker(dataManager)
val sourceFileToPathConverter: SourceFileToPathConverter = SourceFileToCanonicalPathConverter
val sourceFileToPathConverter: SourceFileToPathConverter =
JpsSourceFileToPathConverter(jpsContext.projectDescriptor.project)
val lookupStorageManager = JpsLookupStorageManager(dataManager, sourceFileToPathConverter)
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.jps.incremental
import java.io.File
private val NORMAL_VERSION = 11
private val NORMAL_VERSION = 12
private val NORMAL_VERSION_FILE_NAME = "format-version.txt"
fun localCacheVersionManager(dataRoot: File, isCachesEnabled: Boolean) =
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.jps.incremental
import java.io.File
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) =
CacheVersionManager(