diff options
author | Pascal Rapicault | 2010-05-07 01:19:00 +0000 |
---|---|---|
committer | Pascal Rapicault | 2010-05-07 01:19:00 +0000 |
commit | 598e624dfdcff3766af3972840d5f26f3622003e (patch) | |
tree | bbbc58e80c19b9a333fc7326080f338b90d280a2 | |
parent | cee37463e9671299ec1bcfe20a1e4398a9027289 (diff) | |
download | rt.equinox.p2-598e624dfdcff3766af3972840d5f26f3622003e.tar.gz rt.equinox.p2-598e624dfdcff3766af3972840d5f26f3622003e.tar.xz rt.equinox.p2-598e624dfdcff3766af3972840d5f26f3622003e.zip |
Bug 311929 - Very slow, seems to be repeating operations when trying to install new software
-rw-r--r-- | bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java index cd5f918bd..597c1ac80 100644 --- a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java +++ b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/p2/engine/ProvisioningContext.java @@ -37,7 +37,7 @@ public class ProvisioningContext { private final List<IInstallableUnit> extraIUs = Collections.synchronizedList(new ArrayList<IInstallableUnit>()); private URI[] metadataRepositories; //metadata repositories to consult private final Map<String, String> properties = new HashMap<String, String>(); - private Map<String, IArtifactRepository> referencedArtifactRepositories = null; + private Map<String, URI> referencedArtifactRepositories = null; private static final String FILE_PROTOCOL = "file"; //$NON-NLS-1$ @@ -148,7 +148,7 @@ public class ProvisioningContext { Arrays.sort(repositories, LOCAL_FIRST_COMPARATOR); List<IArtifactRepository> repos = new ArrayList<IArtifactRepository>(); - SubMonitor sub = SubMonitor.convert(monitor, repositories.length * 100); + SubMonitor sub = SubMonitor.convert(monitor, (repositories.length + 1) * 100); for (int i = 0; i < repositories.length; i++) { if (sub.isCanceled()) throw new OperationCanceledException(); @@ -157,10 +157,21 @@ public class ProvisioningContext { } catch (ProvisionException e) { //skip unreadable repositories } + // Remove this URI from the list of extra references if it is there. + if (referencedArtifactRepositories != null) + referencedArtifactRepositories.remove(repositories[i]); + } + // Are there any extra artifact repository references to consider? + if (referencedArtifactRepositories != null && referencedArtifactRepositories.size() > 0) { + SubMonitor innerSub = SubMonitor.convert(sub.newChild(100), referencedArtifactRepositories.size() * 100); + for (URI referencedURI : referencedArtifactRepositories.values()) { + try { + repos.add(repoManager.loadRepository(referencedURI, innerSub.newChild(100))); + } catch (ProvisionException e) { + // skip unreadable repositories + } + } } - if (referencedArtifactRepositories != null) - for (IArtifactRepository repo : referencedArtifactRepositories.values()) - repos.add(repo); return repos; } @@ -172,7 +183,7 @@ public class ProvisioningContext { SubMonitor sub = SubMonitor.convert(monitor, repositories.length * 100); // Clear out the list of remembered artifact repositories - referencedArtifactRepositories = new HashMap<String, IArtifactRepository>(); + referencedArtifactRepositories = new HashMap<String, URI>(); for (int i = 0; i < repositories.length; i++) { if (sub.isCanceled()) throw new OperationCanceledException(); @@ -212,13 +223,11 @@ public class ProvisioningContext { } else if (ref.getType() == IRepository.TYPE_ARTIFACT) { // We want to remember all enabled artifact repository locations. if (isEnabled(artifactManager, ref)) - referencedArtifactRepositories.put(ref.getLocation().toString(), artifactManager.loadRepository(ref.getLocation(), repoSubMon.newChild(100))); + referencedArtifactRepositories.put(ref.getLocation().toString(), ref.getLocation()); } } catch (IllegalArgumentException e) { // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=311338 // ignore invalid location and keep going - } catch (ProvisionException e) { - // ignore this one but keep looking at other references } } } else { |