Bug 245323 Extension location repos are not kept in synch in some cases
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
index 81117f4..892e062 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
@@ -29,7 +29,7 @@
public static final String TYPE = "org.eclipse.equinox.p2.extensionlocation.artifactRepository"; //$NON-NLS-1$
public static final Integer VERSION = new Integer(1);
- final IFileArtifactRepository artifactRepository;
+ IFileArtifactRepository artifactRepository;
private File base;
private Object state = SiteListener.UNINITIALIZED;
@@ -64,9 +64,21 @@
if (state == SiteListener.INITIALIZED || state == SiteListener.INITIALIZING)
return;
// if the repo has not been synchronized for us already, synchronize it.
+ // Note: this will reload "artifactRepository"
SiteListener.synchronizeRepositories(null, this, base);
}
+ void reload() {
+ try {
+ ExtensionLocationArtifactRepository repo = (ExtensionLocationArtifactRepository) new ExtensionLocationArtifactRepositoryFactory().load(getLocation(), null);
+ artifactRepository = repo.artifactRepository;
+ } catch (ProvisionException e) {
+ //unexpected
+ e.printStackTrace();
+ throw new IllegalStateException(e.getMessage());
+ }
+ }
+
void state(Object value) {
state = value;
}
@@ -187,10 +199,12 @@
}
public Map getProperties() {
+ ensureInitialized();
return artifactRepository.getProperties();
}
public String setProperty(String key, String value) {
+ ensureInitialized();
return artifactRepository.setProperty(key, value);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
index 5cc250e..c700035 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
@@ -30,7 +30,7 @@
public static final String TYPE = "org.eclipse.equinox.p2.extensionlocation.metadataRepository"; //$NON-NLS-1$
public static final Integer VERSION = new Integer(1);
- final IMetadataRepository metadataRepository;
+ IMetadataRepository metadataRepository;
private File base;
private Object state = SiteListener.UNINITIALIZED;
@@ -64,9 +64,21 @@
if (state == SiteListener.INITIALIZED || state == SiteListener.INITIALIZING)
return;
// if the repo has not been synchronized for us already, synchronize it.
+ // Note: this will reload "metadataRepository"
SiteListener.synchronizeRepositories(this, null, base);
}
+ void reload() {
+ try {
+ ExtensionLocationMetadataRepository repo = (ExtensionLocationMetadataRepository) new ExtensionLocationMetadataRepositoryFactory().load(getLocation(), null);
+ metadataRepository = repo.metadataRepository;
+ } catch (ProvisionException e) {
+ //unexpected
+ e.printStackTrace();
+ throw new IllegalStateException(e.getMessage());
+ }
+ }
+
void state(Object value) {
state = value;
}
@@ -154,6 +166,7 @@
* @see org.eclipse.equinox.internal.provisional.spi.p2.core.repository.AbstractRepository#getProperties()
*/
public Map getProperties() {
+ ensureInitialized();
return metadataRepository.getProperties();
}
@@ -162,6 +175,7 @@
}
public String setProperty(String key, String value) {
+ ensureInitialized();
return metadataRepository.setProperty(key, value);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
index 9635a05..1eab349 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/SiteListener.java
@@ -73,9 +73,11 @@
public static synchronized void synchronizeRepositories(ExtensionLocationMetadataRepository metadataRepository, ExtensionLocationArtifactRepository artifactRepository, File base) {
try {
if (metadataRepository == null) {
+ artifactRepository.reload();
ExtensionLocationMetadataRepositoryFactory factory = new ExtensionLocationMetadataRepositoryFactory();
metadataRepository = (ExtensionLocationMetadataRepository) factory.load(artifactRepository.getLocation(), null);
} else if (artifactRepository == null) {
+ metadataRepository.reload();
ExtensionLocationArtifactRepositoryFactory factory = new ExtensionLocationArtifactRepositoryFactory();
artifactRepository = (ExtensionLocationArtifactRepository) factory.load(metadataRepository.getLocation(), null);
}