Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/RequestFlexer.java44
1 files changed, 24 insertions, 20 deletions
diff --git a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/RequestFlexer.java b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/RequestFlexer.java
index 3823164ce..c3f90da20 100644
--- a/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/RequestFlexer.java
+++ b/bundles/org.eclipse.equinox.p2.operations/src/org/eclipse/equinox/internal/p2/operations/RequestFlexer.java
@@ -12,8 +12,7 @@ package org.eclipse.equinox.internal.p2.operations;
import java.util.*;
import java.util.Map.Entry;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.director.ProfileChangeRequest;
import org.eclipse.equinox.p2.engine.*;
import org.eclipse.equinox.p2.engine.query.IUProfilePropertyQuery;
@@ -84,11 +83,12 @@ public class RequestFlexer {
public IProfileChangeRequest getChangeRequest(IProfileChangeRequest request, IProfile prof, IProgressMonitor monitor) {
this.profile = prof;
- IProfileChangeRequest loosenedRequest = computeLooseRequest(request);
+ SubMonitor sub = SubMonitor.convert(monitor, 2);
+ IProfileChangeRequest loosenedRequest = computeLooseRequest(request, sub.newChild(1));
if (canShortCircuit(request)) {
return null;
}
- IProvisioningPlan intermediaryPlan = resolve(loosenedRequest);
+ IProvisioningPlan intermediaryPlan = resolve(loosenedRequest, sub.newChild(1));
if (!intermediaryPlan.getStatus().isOK())
return null;
if (intermediaryPlan.getAdditions().query(QueryUtil.ALL_UNITS, new NullProgressMonitor()).isEmpty() && intermediaryPlan.getRemovals().query(QueryUtil.ALL_UNITS, new NullProgressMonitor()).isEmpty())
@@ -209,10 +209,11 @@ public class RequestFlexer {
//Create a request where the original requirements are "loosened" according to flags specified in this instance
//The resulting profile change request uses the requirements specified using p2QL and those appear in the extraRequirements.
- private IProfileChangeRequest computeLooseRequest(IProfileChangeRequest originalRequest) {
+ private IProfileChangeRequest computeLooseRequest(IProfileChangeRequest originalRequest, IProgressMonitor monitor) {
IProfileChangeRequest loosenedRequest = planner.createChangeRequest(profile);
- loosenUpOriginalRequest(loosenedRequest, originalRequest);
- loosenUpInstalledSoftware(loosenedRequest, originalRequest);
+ SubMonitor sub = SubMonitor.convert(monitor, 2);
+ loosenUpOriginalRequest(loosenedRequest, originalRequest, sub.newChild(1));
+ loosenUpInstalledSoftware(loosenedRequest, originalRequest, sub.newChild(1));
return loosenedRequest;
}
@@ -220,7 +221,7 @@ public class RequestFlexer {
return request.getRemovals().contains(removalRequested);
}
- private IProvisioningPlan resolve(IProfileChangeRequest temporaryRequest) {
+ private IProvisioningPlan resolve(IProfileChangeRequest temporaryRequest, IProgressMonitor monitor) {
String explainPropertyBackup = null;
try {
temporaryRequest.setProfileProperty("_internal_user_defined_", "true"); //$NON-NLS-1$//$NON-NLS-2$
@@ -228,7 +229,7 @@ public class RequestFlexer {
explainPropertyBackup = provisioningContext.getProperty(EXPLANATION_ENABLEMENT);
provisioningContext.setProperty(EXPLANATION_ENABLEMENT, Boolean.FALSE.toString());
}
- return planner.getProvisioningPlan(temporaryRequest, provisioningContext, null);
+ return planner.getProvisioningPlan(temporaryRequest, provisioningContext, SubMonitor.convert(monitor));
} finally {
if (provisioningContext != null) {
if (explainPropertyBackup == null)
@@ -241,11 +242,11 @@ public class RequestFlexer {
//Loosen the request originally emitted.
//For example if the user said "install A 1.0", then a new Requirement is added saying (install A 1.0 or install A 2.0), this depending on the configuration flags
- private void loosenUpOriginalRequest(IProfileChangeRequest newRequest, IProfileChangeRequest originalRequest) {
+ private void loosenUpOriginalRequest(IProfileChangeRequest newRequest, IProfileChangeRequest originalRequest, IProgressMonitor monitor) {
//First deal with the IUs that are being added
Collection<IInstallableUnit> requestedAdditions = originalRequest.getAdditions();
for (IInstallableUnit addedIU : requestedAdditions) {
- Collection<IInstallableUnit> potentialUpdates = allowDifferentVersion ? findAllVersionsAvailable(addedIU) : new ArrayList<IInstallableUnit>();
+ Collection<IInstallableUnit> potentialUpdates = allowDifferentVersion ? findAllVersionsAvailable(addedIU, monitor) : new ArrayList<IInstallableUnit>();
foundDifferentVersionsForElementsToInstall = (foundDifferentVersionsForElementsToInstall || (potentialUpdates.size() == 0 ? false : true));
potentialUpdates.add(addedIU); //Make sure that we include the IU that we were initially trying to install
@@ -298,20 +299,23 @@ public class RequestFlexer {
return INCLUSION_OPTIONAL.equals(match.get(INCLUSION_RULES));
}
- private Collection<IInstallableUnit> findAllVersionsAvailable(IInstallableUnit iu) {
+ private Collection<IInstallableUnit> findAllVersionsAvailable(IInstallableUnit iu, IProgressMonitor monitor) {
Collection<IInstallableUnit> allVersions = new HashSet<IInstallableUnit>();
- allVersions.addAll(findIUsWithSameId(iu));
- allVersions.addAll(findUpdates(iu));
+ SubMonitor sub = SubMonitor.convert(monitor);
+ allVersions.addAll(findIUsWithSameId(iu, sub.newChild(1)));
+ allVersions.addAll(findUpdates(iu, sub.newChild(1)));
return allVersions;
}
- private Collection<IInstallableUnit> findIUsWithSameId(IInstallableUnit iu) {
- return provisioningContext.getMetadata(null).query(QueryUtil.createIUQuery(iu.getId()), null).toUnmodifiableSet();
+ private Collection<IInstallableUnit> findIUsWithSameId(IInstallableUnit iu, IProgressMonitor monitor) {
+ SubMonitor sub = SubMonitor.convert(monitor, 2);
+ IQueryable<IInstallableUnit> metadata = provisioningContext.getMetadata(sub.newChild(1));
+ return metadata.query(QueryUtil.createIUQuery(iu.getId()), sub.newChild(1)).toUnmodifiableSet();
}
- private Collection<IInstallableUnit> findUpdates(IInstallableUnit iu) {
+ private Collection<IInstallableUnit> findUpdates(IInstallableUnit iu, IProgressMonitor monitor) {
Collection<IInstallableUnit> availableUpdates = new HashSet<IInstallableUnit>();
- IQueryResult<IInstallableUnit> updatesAvailable = planner.updatesFor(iu, provisioningContext, null);
+ IQueryResult<IInstallableUnit> updatesAvailable = planner.updatesFor(iu, provisioningContext, SubMonitor.convert(monitor));
for (Iterator<IInstallableUnit> iterator = updatesAvailable.iterator(); iterator.hasNext();) {
availableUpdates.add(iterator.next());
}
@@ -337,13 +341,13 @@ public class RequestFlexer {
//Loosen up the IUs that are already part of the profile
//Given how we are creating our request, this needs to take into account the removal from the original request as well as the change in inclusion
- private IProfileChangeRequest loosenUpInstalledSoftware(IProfileChangeRequest request, IProfileChangeRequest originalRequest) {
+ private IProfileChangeRequest loosenUpInstalledSoftware(IProfileChangeRequest request, IProfileChangeRequest originalRequest, IProgressMonitor monitor) {
if (!allowInstalledRemoval && !allowInstalledUpdate)
return request;
Set<IInstallableUnit> allRoots = getRoots();
for (IInstallableUnit existingIU : allRoots) {
- Collection<IInstallableUnit> potentialUpdates = allowInstalledUpdate ? findUpdates(existingIU) : new HashSet<IInstallableUnit>();
+ Collection<IInstallableUnit> potentialUpdates = allowInstalledUpdate ? findUpdates(existingIU, monitor) : new HashSet<IInstallableUnit>();
foundDifferentVersionsForElementsInstalled = (foundDifferentVersionsForElementsInstalled || (potentialUpdates.size() == 0 ? false : true));
potentialUpdates.add(existingIU);
Collection<IRequirement> newRequirement = new ArrayList<IRequirement>(1);

Back to the top