diff options
author | Simon Kaegi | 2009-01-07 06:35:39 +0000 |
---|---|---|
committer | Simon Kaegi | 2009-01-07 06:35:39 +0000 |
commit | 2b84ca339b353190f782950aee40e784cf50bcbe (patch) | |
tree | dfd57dfbb090b15bd245d2060833962132ce9a4c /bundles/org.eclipse.equinox.p2.director | |
parent | 29d3d43f092ba059efe70ba40c9b9040d9177d83 (diff) | |
download | rt.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')
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); + } |