From bc94afe67ff88f6e80c3e69540eb08e0f91c19a7 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 21 Feb 2019 12:10:50 +0100 Subject: [PATCH] IDEA-CR-43780 sort by name if no anchor files --- .../testSrc/ConfigImportHelperTest.kt | 31 ++++++++++++++++--- .../application/ConfigImportHelper.java | 8 ++++- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/platform/configuration-store-impl/testSrc/ConfigImportHelperTest.kt b/platform/configuration-store-impl/testSrc/ConfigImportHelperTest.kt index 4eba943ffd2a..669c45391561 100644 --- a/platform/configuration-store-impl/testSrc/ConfigImportHelperTest.kt +++ b/platform/configuration-store-impl/testSrc/ConfigImportHelperTest.kt @@ -88,12 +88,35 @@ class ConfigImportHelperTest { """.trimIndent()) } - private fun writeStorageFile(version: String, lastModified: Long, isMacOs: Boolean) { - val path = fsRule.fs.getPath("/data/" + (constructConfigPath(version, isMacOs)), - PathManager.OPTIONS_DIRECTORY + '/' + StoragePathMacros.NOT_ROAMABLE_FILE) - Files.setLastModifiedTime(path.write(version), FileTime.fromMillis(lastModified)) + @Test + fun `sort if no anchor files`() { + val isMacOs = true + fun writeStorageDir(version: String) { + val dir = fsRule.fs.getPath("/data/" + (constructConfigPath(version, isMacOs))) + dir.createDirectories() + } + + val fs = fsRule.fs + writeStorageDir("2022.1") + writeStorageDir("2021.1") + writeStorageDir("2020.1") + + val newConfigPath = fs.getPath("/data/${constructConfigPath("2022.3", isMacOs)}") + // create new config dir to test that it will be not suggested too (as on start of new version config dir can be created) + newConfigPath.createDirectories() + + assertThat(ConfigImportHelper.findRecentConfigDirectory(newConfigPath, isMacOs).joinToString("\n")).isEqualTo(""" + /data/${constructConfigPath("2022.1", isMacOs)} + /data/${constructConfigPath("2021.1", isMacOs)} + /data/${constructConfigPath("2020.1", isMacOs)} + """.trimIndent()) } + private fun writeStorageFile(version: String, lastModified: Long, isMacOs: Boolean) { + val dir = fsRule.fs.getPath("/data/" + (constructConfigPath(version, isMacOs))) + val file = dir.resolve(PathManager.OPTIONS_DIRECTORY + '/' + StoragePathMacros.NOT_ROAMABLE_FILE) + Files.setLastModifiedTime(file.write(version), FileTime.fromMillis(lastModified)) + } } private fun constructConfigPath(version: String, isMacOs: Boolean): String { diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java index a69d11b6e19d..7cf4b83841c9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ConfigImportHelper.java @@ -197,7 +197,13 @@ public class ConfigImportHelper { for (Object key : fileToLastModified.keys()) { result.add((Path)key); } - result.sort((o1, o2) -> (int)(fileToLastModified.get(o2) - fileToLastModified.get(o1))); + result.sort((o1, o2) -> { + int diff = (int)(fileToLastModified.get(o2) - fileToLastModified.get(o1)); + if (diff == 0) { + return StringUtil.naturalCompare(o2.toString(), o1.toString()); + } + return diff; + }); return result; }