From 7e9b8df7edf59dfdc49f00df8ba630fc5192fc50 Mon Sep 17 00:00:00 2001 From: Dmitry Trofimov Date: Fri, 8 Sep 2017 17:21:05 +0300 Subject: [PATCH] Make prebuilt skeletons minor version agnostic --- .../util/resources/misc/registry.properties | 2 + .../sdk/skeletons/PySkeletonRefresher.java | 40 ++++++++++++++----- .../python/tools/BuildZippedSkeletons.kt | 2 +- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index ce56af28459d..e8921dcabc62 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -573,6 +573,8 @@ python.django.commandsToSkip= # Comma separated list of commands to use native runner instead of PyCharm specific python.django.commandsToUseNativeRunner= +python.prebuilt.skeletons.minor.version.aware=false + show.method.base.class.in.java.file.structure=true vcs.log.empty.change.list.creation=false diff --git a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java index 7a48e484ede0..4ce845b594fd 100644 --- a/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java +++ b/python/src/com/jetbrains/python/sdk/skeletons/PySkeletonRefresher.java @@ -30,6 +30,7 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; @@ -811,17 +812,27 @@ public class PySkeletonRefresher { @Nullable private VirtualFile findPregeneratedSkeletons() { final File root = findPregeneratedSkeletonsRoot(); - if (root == null) { + if (root == null || !root.exists()) { return null; } LOG.info("Pregenerated skeletons root is " + root); - String prebuiltSkeletonsName = getPregeneratedSkeletonsName(); + String prebuiltSkeletonsName = getPregeneratedSkeletonsName(Registry.is("python.prebuilt.skeletons.minor.version.aware")); if (prebuiltSkeletonsName == null) return null; - File f = new File(root, prebuiltSkeletonsName); + File f = null; - if (f.exists()) { + File[] children = root.listFiles(); + if (children != null) { + for (File file : children) { + if (file.getAbsolutePath().matches(".*" + prebuiltSkeletonsName + "\\.?\\d*\\.zip")) { + f = file; + break; + } + } + } + + if (f != null) { LOG.info("Found pregenerated skeletons at " + f.getPath()); final VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(f); if (virtualFile == null) { @@ -836,12 +847,12 @@ public class PySkeletonRefresher { } } - public String getPregeneratedSkeletonsName() { - return getPregeneratedSkeletonsName(mySdk, myGeneratorVersion); + public String getPregeneratedSkeletonsName(boolean witnMinorVersion) { + return getPregeneratedSkeletonsName(mySdk, myGeneratorVersion, witnMinorVersion); } @Nullable - public static String getPregeneratedSkeletonsName(@NotNull Sdk sdk, int generatorVersion) { + public static String getPregeneratedSkeletonsName(@NotNull Sdk sdk, int generatorVersion, boolean withMinorVersion) { String prebuiltSkeletonsName; @NonNls final String versionString = sdk.getVersionString(); if (versionString == null) { @@ -854,6 +865,14 @@ public class PySkeletonRefresher { String version = versionString.toLowerCase().replace(" ", "-"); + if (!withMinorVersion) { + int ind = version.lastIndexOf("."); + if (ind != -1) { + // strip last version + version = version.substring(0, ind); + } + } + if (SystemInfo.isMac) { String osVersion = SystemInfo.OS_VERSION; int dot = osVersion.indexOf('.'); @@ -863,12 +882,13 @@ public class PySkeletonRefresher { osVersion = osVersion.substring(0, secondDot); } } - prebuiltSkeletonsName = "skeletons-mac-" + generatorVersion + "-" + osVersion + "-" + version + ".zip"; + prebuiltSkeletonsName = "skeletons-mac-" + generatorVersion + "-" + osVersion + "-" + version; } else { String os = SystemInfo.isWindows ? "win" : "nix"; - prebuiltSkeletonsName = "skeletons-" + os + "-" + generatorVersion + "-" + version + ".zip"; - } return prebuiltSkeletonsName; + prebuiltSkeletonsName = "skeletons-" + os + "-" + generatorVersion + "-" + version; + } + return prebuiltSkeletonsName; } @Nullable diff --git a/python/tools/src/com/jetbrains/python/tools/BuildZippedSkeletons.kt b/python/tools/src/com/jetbrains/python/tools/BuildZippedSkeletons.kt index ba2205d389f6..cd9fd015d150 100644 --- a/python/tools/src/com/jetbrains/python/tools/BuildZippedSkeletons.kt +++ b/python/tools/src/com/jetbrains/python/tools/BuildZippedSkeletons.kt @@ -57,7 +57,7 @@ fun main(args: Array) { refresher.regenerateSkeletons(SkeletonVersionChecker(0)) - val dirPacked = File(skeletonsDir.parent, refresher.pregeneratedSkeletonsName) + val dirPacked = File(skeletonsDir.parent, refresher.getPregeneratedSkeletonsName(true)) val zip = ZipOutputStream(FileOutputStream(dirPacked)) ZipUtil.addDirToZipRecursively(zip, dirPacked, skeletonsDir, "", null, null) zip.close()