KT-34862 use relative path for incremental build cache
This commit is contained in:
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.incremental.storage
|
||||
|
||||
import java.io.File
|
||||
|
||||
open class IncrementalFileToPathConverter(val rootProjectDir: File?) : FileToPathConverter {
|
||||
//project root dir
|
||||
private val projectDirPath = rootProjectDir?.normalize()?.absolutePath
|
||||
|
||||
override fun toPath(file: File): String {
|
||||
val path = file.normalize().absolutePath
|
||||
return when {
|
||||
projectDirPath == null || !path.startsWith(projectDirPath) -> path
|
||||
else -> PROJECT_DIR_PLACEHOLDER + path.substring(projectDirPath.length)
|
||||
}
|
||||
}
|
||||
|
||||
override fun toFile(path: String): File =
|
||||
when {
|
||||
rootProjectDir != null && path.startsWith(PROJECT_DIR_PLACEHOLDER) -> rootProjectDir.resolve(path.substring(PATH_PREFIX.length))
|
||||
else -> File(path)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
private const val PROJECT_DIR_PLACEHOLDER = "${'$'}PROJECT_DIR$"
|
||||
private const val PATH_PREFIX = "$PROJECT_DIR_PLACEHOLDER/"
|
||||
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.incremental.storage
|
||||
|
||||
import org.jetbrains.kotlin.TestWithWorkingDir
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
|
||||
internal class IncrementalFileToPathConverterTest : TestWithWorkingDir() {
|
||||
|
||||
@Test
|
||||
fun testPathTransform() {
|
||||
val relativeFilePath = "testFile.txt"
|
||||
val transformedPath = testPathTransformation(workingDir.resolve("testDir"), relativeFilePath)
|
||||
|
||||
assertEquals("${'$'}PROJECT_DIR${'$'}/$relativeFilePath", transformedPath)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testComplicatedProjectRootPath() {
|
||||
val relativeFilePath = "testFile.txt"
|
||||
val transformedPath = testPathTransformation(workingDir.resolve("first/../testDir"), relativeFilePath)
|
||||
|
||||
assertEquals("${'$'}PROJECT_DIR${'$'}/$relativeFilePath", transformedPath)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testInccorectProjectRootPath() {
|
||||
val relativeFilePath = "testFile.txt"
|
||||
val transformedPath = testPathTransformation(workingDir.resolve("testDir/"), relativeFilePath)
|
||||
|
||||
assertEquals("${'$'}PROJECT_DIR${'$'}/$relativeFilePath", transformedPath)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFileOutOfProject() {
|
||||
val relativeFilePath = "../testFile.txt"
|
||||
val transformedPath = testPathTransformation(workingDir.resolve("testDir"), relativeFilePath)
|
||||
|
||||
assertEquals("${workingDir.absolutePath}/testFile.txt", transformedPath)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testFileWithExtraSlash() {
|
||||
val relativeFilePath = "testFile.txt/"
|
||||
val transformedPath = testPathTransformation(workingDir.resolve("testDir"), relativeFilePath)
|
||||
|
||||
assertEquals("${'$'}PROJECT_DIR${'$'}/testFile.txt", transformedPath)
|
||||
}
|
||||
|
||||
private fun testPathTransformation(projectRoot: File, relativeFilePath: String): String {
|
||||
val pathConverter = IncrementalFileToPathConverter(projectRoot)
|
||||
val testFile = projectRoot.resolve(relativeFilePath)
|
||||
val transformedPath = pathConverter.toPath(testFile)
|
||||
assertEquals(testFile.normalize().absolutePath, pathConverter.toFile(transformedPath).normalize().absolutePath)
|
||||
return transformedPath
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user