fixed PY-6500 Don't allow to run multiple install or upgrade processes for the same package

This commit is contained in:
Ekaterina Tuzova
2012-05-05 16:30:11 +04:00
parent 2cf42a9c74
commit ff81273e5a
2 changed files with 12 additions and 3 deletions
@@ -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;