From ff81273e5a1a9e22c3edee95556750f79af57819 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Sat, 5 May 2012 16:30:11 +0400 Subject: [PATCH] fixed PY-6500 Don't allow to run multiple install or upgrade processes for the same package --- .../python/packaging/ui/ManagePackagesDialog.java | 7 ++++++- .../jetbrains/python/packaging/ui/PyPackagesPanel.java | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/packaging/ui/ManagePackagesDialog.java b/python/src/com/jetbrains/python/packaging/ui/ManagePackagesDialog.java index ad395a44029a..c580e2c738d7 100644 --- a/python/src/com/jetbrains/python/packaging/ui/ManagePackagesDialog.java +++ b/python/src/com/jetbrains/python/packaging/ui/ManagePackagesDialog.java @@ -81,6 +81,8 @@ public class ManagePackagesDialog extends DialogWrapper { private final Set myInstalledPackages; private final PyPackagesPanel myPackageListPanel; + private Set currentlyInstalling = new HashSet(); + 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 diff --git a/python/src/com/jetbrains/python/packaging/ui/PyPackagesPanel.java b/python/src/com/jetbrains/python/packaging/ui/PyPackagesPanel.java index bd729489289d..e3b45b547cee 100644 --- a/python/src/com/jetbrains/python/packaging/ui/PyPackagesPanel.java +++ b/python/src/com/jetbrains/python/packaging/ui/PyPackagesPanel.java @@ -54,6 +54,7 @@ public class PyPackagesPanel extends JPanel { private boolean myHasDistribute; private boolean myHasPip = true; private final List> myPathChangedListeners = new ArrayList>(); + private Set currentlyInstalling = new HashSet(); 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;