Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Kaegi2009-01-07 06:35:39 +0000
committerSimon Kaegi2009-01-07 06:35:39 +0000
commit2b84ca339b353190f782950aee40e784cf50bcbe (patch)
treedfd57dfbb090b15bd245d2060833962132ce9a4c /bundles/org.eclipse.equinox.p2.director
parent29d3d43f092ba059efe70ba40c9b9040d9177d83 (diff)
downloadrt.equinox.p2-2b84ca339b353190f782950aee40e784cf50bcbe.tar.gz
rt.equinox.p2-2b84ca339b353190f782950aee40e784cf50bcbe.tar.xz
rt.equinox.p2-2b84ca339b353190f782950aee40e784cf50bcbe.zip
Bug 247058 [revert] Reading and Writing of rollback repo gets really slow after many updates
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.director')
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java13
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java11
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IPlanner.java3
4 files changed, 29 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
index a986b900d..c1ec73f82 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimpleDirector.java
@@ -52,6 +52,19 @@ public class SimpleDirector implements IDirector {
}
}
+ public IStatus revert(IProfile currentProfile, IProfile revertProfile, ProvisioningContext context, IProgressMonitor monitor) {
+ SubMonitor sub = SubMonitor.convert(monitor, Messages.Director_Task_Updating, PlanWork + EngineWork);
+ try {
+ ProvisioningPlan plan = planner.getRevertPlan(currentProfile, revertProfile, context, sub.newChild(PlanWork));
+ if (!plan.getStatus().isOK())
+ return plan.getStatus();
+
+ return engine.perform(currentProfile, new DefaultPhaseSet(), plan.getOperands(), context, sub.newChild(EngineWork));
+ } finally {
+ sub.done();
+ }
+ }
+
public IStatus revert(IInstallableUnit target, IProfile profile, ProvisioningContext context, IProgressMonitor monitor) {
SubMonitor sub = SubMonitor.convert(monitor, Messages.Director_Task_Updating, PlanWork + EngineWork);
try {
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
index dfbe97982..84d0d9576 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/p2/director/SimplePlanner.java
@@ -184,6 +184,17 @@ public class SimplePlanner implements IPlanner {
}
}
+ public ProvisioningPlan getRevertPlan(IProfile currentProfile, IProfile revertProfile, ProvisioningContext context, IProgressMonitor monitor) {
+ SubMonitor sub = SubMonitor.convert(monitor, ExpandWork);
+ sub.setTaskName(Messages.Director_Task_Resolving_Dependencies);
+ try {
+ ProfileChangeRequest profileChangeRequest = FormerState.generateProfileDeltaChangeRequest(currentProfile, revertProfile);
+ return getProvisioningPlan(profileChangeRequest, context, sub.newChild(ExpandWork / 2));
+ } finally {
+ sub.done();
+ }
+ }
+
public static IInstallableUnit[] findPlannerMarkedIUs(final IProfile profile) {
Query markerQuery = new Query() {
public boolean isMatch(Object candidate) {
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
index c11d25e55..06d7b80e9 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IDirector.java
@@ -55,4 +55,6 @@ public interface IDirector {
* previous profile states is stored.
*/
public URI getRollbackRepositoryLocation();
+
+ public IStatus revert(IProfile profile, IProfile revertProfile, ProvisioningContext context, IProgressMonitor monitor);
}
diff --git a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IPlanner.java b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IPlanner.java
index ab5fba4d6..7a34fde85 100644
--- a/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IPlanner.java
+++ b/bundles/org.eclipse.equinox.p2.director/src/org/eclipse/equinox/internal/provisional/p2/director/IPlanner.java
@@ -11,6 +11,7 @@
package org.eclipse.equinox.internal.provisional.p2.director;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
@@ -28,4 +29,6 @@ public interface IPlanner {
public IInstallableUnit[] updatesFor(IInstallableUnit toUpdate, ProvisioningContext context, IProgressMonitor monitor);
+ public ProvisioningPlan getRevertPlan(IProfile currentProfile, IProfile revertProfile, ProvisioningContext context, IProgressMonitor monitor);
+
}

Back to the top