mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
fixed PY-6500 Don't allow to run multiple install or upgrade processes for the same package
This commit is contained in:
@@ -81,6 +81,8 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
private final Set<String> myInstalledPackages;
|
||||
private final PyPackagesPanel myPackageListPanel;
|
||||
|
||||
private Set<String> currentlyInstalling = new HashSet<String>();
|
||||
|
||||
public ManagePackagesDialog(@NotNull Project project, @NotNull final Sdk sdk, @NotNull final PyPackagesPanel packageListPanel) {
|
||||
super(false);
|
||||
|
||||
@@ -227,6 +229,7 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
public void started() {
|
||||
setDownloadStatus(true);
|
||||
table.setPaintBusy(true);
|
||||
currentlyInstalling.add(packageName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -235,9 +238,11 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
setDownloadStatus(false);
|
||||
addNotifications(exceptions, packageName, myNotificationArea, myPackageListPanel.getNotificationsArea());
|
||||
myPackageListPanel.updatePackages(sdk, myInstalledPackages);
|
||||
currentlyInstalling.remove(packageName);
|
||||
}
|
||||
});
|
||||
ui.install(Collections.singletonList(req), extraArgs);
|
||||
myInstallButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -445,7 +450,7 @@ public class ManagePackagesDialog extends DialogWrapper {
|
||||
}
|
||||
});
|
||||
}
|
||||
myInstallButton.setEnabled(true);
|
||||
myInstallButton.setEnabled(!currentlyInstalling.contains(packageName));
|
||||
|
||||
PyPIPackageUtil.INSTANCE.fillPackageDetails(packageName, new AsyncCallback() {
|
||||
@Override
|
||||
|
||||
@@ -54,6 +54,7 @@ public class PyPackagesPanel extends JPanel {
|
||||
private boolean myHasDistribute;
|
||||
private boolean myHasPip = true;
|
||||
private final List<Consumer<Sdk>> myPathChangedListeners = new ArrayList<Consumer<Sdk>>();
|
||||
private Set<String> currentlyInstalling = new HashSet<String>();
|
||||
|
||||
public PyPackagesPanel(Project project, PyPackagesNotificationPanel area) {
|
||||
super(new GridBagLayout());
|
||||
@@ -204,6 +205,7 @@ public class PyPackagesPanel extends JPanel {
|
||||
@Override
|
||||
public void started() {
|
||||
myPackagesTable.setPaintBusy(true);
|
||||
currentlyInstalling.add(packageName);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -211,7 +213,7 @@ public class PyPackagesPanel extends JPanel {
|
||||
myPackagesTable.clearSelection();
|
||||
updatePackages(selectedSdk);
|
||||
myPackagesTable.setPaintBusy(false);
|
||||
|
||||
currentlyInstalling.remove(packageName);
|
||||
if (exceptions.isEmpty()) {
|
||||
myNotificationArea.showSuccess("Package successfully upgraded");
|
||||
}
|
||||
@@ -223,6 +225,7 @@ public class PyPackagesPanel extends JPanel {
|
||||
}
|
||||
});
|
||||
ui.install(requirements, Collections.singletonList("-U"));
|
||||
myUpgradeButton.setEnabled(false);
|
||||
}
|
||||
}, ModalityState.any());
|
||||
}
|
||||
@@ -264,7 +267,8 @@ public class PyPackagesPanel extends JPanel {
|
||||
final PyPackage pyPackage = (PyPackage)value;
|
||||
final String pyPackageName = pyPackage.getName();
|
||||
final String availableVersion = (String)myPackagesTable.getValueAt(index, 2);
|
||||
upgradeAvailable = PyRequirement.VERSION_COMPARATOR.compare(pyPackage.getVersion(), availableVersion) < 0;
|
||||
upgradeAvailable = PyRequirement.VERSION_COMPARATOR.compare(pyPackage.getVersion(), availableVersion) < 0 &&
|
||||
!currentlyInstalling.contains(pyPackageName);
|
||||
isPipOrDistribute = "pip".equals(pyPackageName) || "distribute".equals(pyPackageName);
|
||||
isAvailabe = !isPipOrDistribute;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user