mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-27360 Use multimap to initialize Conda package cache
Also use TreeSet as the container for values to sort versions in descending order and keep them unique at the same time.
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
import com.google.common.collect.Multimap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author Mikhail Golubev
|
||||
@@ -23,8 +23,8 @@ public class PyCondaPackageCache extends PyAbstractPackageCache {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static synchronized PyCondaPackageCache reload(@NotNull Map<String, List<String>> packageNames) {
|
||||
ourInstance = new PyCondaPackageCache(packageNames);
|
||||
public static synchronized PyCondaPackageCache reload(@NotNull Multimap<String, String> nameToVersion) {
|
||||
ourInstance = new PyCondaPackageCache(nameToVersion);
|
||||
store(ourInstance, CACHE_FILE_NAME);
|
||||
return ourInstance;
|
||||
}
|
||||
@@ -32,9 +32,9 @@ public class PyCondaPackageCache extends PyAbstractPackageCache {
|
||||
private PyCondaPackageCache() {
|
||||
}
|
||||
|
||||
private PyCondaPackageCache(@NotNull Map<String, List<String>> nameToVersion) {
|
||||
for (Map.Entry<String, List<String>> entry : nameToVersion.entrySet()) {
|
||||
myPackages.put(entry.getKey(), new PyAbstractPackageCache.PackageInfo(entry.getValue()));
|
||||
private PyCondaPackageCache(@NotNull Multimap<String, String> nameToVersion) {
|
||||
for (String name : nameToVersion.keySet()) {
|
||||
myPackages.put(name, new PyAbstractPackageCache.PackageInfo(new ArrayList<>(nameToVersion.get(name))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.jetbrains.python.packaging;
|
||||
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Multimaps;
|
||||
import com.intellij.execution.configurations.PathEnvironmentVariableUtil;
|
||||
import com.intellij.execution.process.ProcessOutput;
|
||||
import com.intellij.openapi.components.*;
|
||||
@@ -35,7 +37,10 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
@State(name = "PyCondaPackageService", storages = @Storage(value="conda_packages.xml", roamingType = RoamingType.DISABLED))
|
||||
public class PyCondaPackageService implements PersistentStateComponent<PyCondaPackageService> {
|
||||
@@ -182,17 +187,12 @@ public class PyCondaPackageService implements PersistentStateComponent<PyCondaPa
|
||||
return;
|
||||
}
|
||||
|
||||
final Map<String, List<String>> nameToVersions = new HashMap<>();
|
||||
final Multimap<String, String> nameToVersions =
|
||||
Multimaps.newSortedSetMultimap(new HashMap<>(), () -> new TreeSet<>(VersionComparatorUtil.COMPARATOR.reversed()));
|
||||
for (String line : output.getStdoutLines()) {
|
||||
final List<String> split = StringUtil.split(line, "\t");
|
||||
if (split.size() < 2) continue;
|
||||
final String packageName = split.get(0);
|
||||
final String packageVersion = split.get(1);
|
||||
final List<String> versions = nameToVersions.computeIfAbsent(packageName, k -> new ArrayList<>());
|
||||
final int sortedIndex = Collections.binarySearch(versions, packageVersion, VersionComparatorUtil.COMPARATOR.reversed());
|
||||
if (sortedIndex < 0) {
|
||||
versions.add(-(sortedIndex + 1), packageVersion);
|
||||
}
|
||||
nameToVersions.put(split.get(0), split.get(1));
|
||||
}
|
||||
PyCondaPackageCache.reload(nameToVersions);
|
||||
LAST_TIME_CHECKED = System.currentTimeMillis();
|
||||
|
||||
Reference in New Issue
Block a user