diff options
author | John Arthorne | 2008-01-11 16:45:56 +0000 |
---|---|---|
committer | John Arthorne | 2008-01-11 16:45:56 +0000 |
commit | 0c26813151c77bda96fb1b35ffcf58e74aa05fd8 (patch) | |
tree | a7338e0dc3c573e3c2a84d60e22be3a15ea59b51 /bundles/org.eclipse.equinox.p2.directorywatcher/src | |
parent | 30aecc5b3ad752b3021f0a6a512d6e9d50ae1ef6 (diff) | |
download | rt.equinox.p2-0c26813151c77bda96fb1b35ffcf58e74aa05fd8.tar.gz rt.equinox.p2-0c26813151c77bda96fb1b35ffcf58e74aa05fd8.tar.xz rt.equinox.p2-0c26813151c77bda96fb1b35ffcf58e74aa05fd8.zip |
Bug 212348 [prov] [repo] Find a way to better report the failure of repository addition
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.directorywatcher/src')
2 files changed, 36 insertions, 29 deletions
diff --git a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java index e6fa220e1..6c30c457b 100644 --- a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java +++ b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java @@ -13,9 +13,11 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.*; +import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper; import org.eclipse.equinox.p2.artifact.repository.IArtifactRepository; import org.eclipse.equinox.p2.artifact.repository.IArtifactRepositoryManager; +import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.directorywatcher.DirectoryChangeListener; import org.eclipse.equinox.p2.directorywatcher.DirectoryWatcher; import org.eclipse.equinox.p2.metadata.generator.*; @@ -163,23 +165,27 @@ public class ProvisioningListener extends DirectoryChangeListener { private void initializeMetadataRepository(EclipseInstallGeneratorInfoProvider provider, URL location) { IMetadataRepositoryManager manager = (IMetadataRepositoryManager) ServiceHelper.getService(Activator.getContext(), IMetadataRepositoryManager.class.getName()); - IMetadataRepository repository = manager.loadRepository(location, null); - if (repository != null) { - if (repository.isModifiable()) { - provider.setMetadataRepository(repository); - if (!provider.append()) - repository.removeAll(); - return; + try { + IMetadataRepository repository = manager.loadRepository(location, null); + if (repository != null) { + if (repository.isModifiable()) { + provider.setMetadataRepository(repository); + if (!provider.append()) + repository.removeAll(); + return; + } + throw new IllegalArgumentException("Artifact repository not writeable: " + location); //$NON-NLS-1$ } - throw new IllegalArgumentException("Artifact repository not writeable: " + location); //$NON-NLS-1$ + } catch (ProvisionException e) { + //fall through and create a new repository + } + try { + String repositoryName = location + " - metadata"; //$NON-NLS-1$ + IMetadataRepository repository = manager.createRepository(location, repositoryName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY); + provider.setMetadataRepository(repository); + } catch (ProvisionException e) { + LogHelper.log(e); } - - // the given repo location is not an existing repo so we have to create something - // TODO for now create a random repo by default. - String repositoryName = location + " - metadata"; //$NON-NLS-1$ - IMetadataRepository result = manager.createRepository(location, repositoryName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY); - if (result != null) - provider.setMetadataRepository(result); } } diff --git a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/p2/directorywatcher/RepositoryListener.java b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/p2/directorywatcher/RepositoryListener.java index f4885fc2e..72053bd15 100644 --- a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/p2/directorywatcher/RepositoryListener.java +++ b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/p2/directorywatcher/RepositoryListener.java @@ -13,7 +13,9 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.*; +import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; import org.eclipse.equinox.p2.artifact.repository.*; +import org.eclipse.equinox.p2.core.ProvisionException; import org.eclipse.equinox.p2.core.repository.IRepository; import org.eclipse.equinox.p2.metadata.IArtifactKey; import org.eclipse.equinox.p2.metadata.IInstallableUnit; @@ -101,28 +103,27 @@ public class RepositoryListener extends DirectoryChangeListener { private IMetadataRepository initializeMetadataRepository(BundleContext context, URL stateDirURL) { ServiceReference reference = context.getServiceReference(IMetadataRepositoryManager.class.getName()); - if (reference == null) - throw new IllegalStateException("MetadataRepositoryManager not registered."); - - IMetadataRepositoryManager manager = (IMetadataRepositoryManager) context.getService(reference); + IMetadataRepositoryManager manager = null; + if (reference != null) + manager = (IMetadataRepositoryManager) context.getService(reference); if (manager == null) throw new IllegalStateException("MetadataRepositoryManager not registered."); - IMetadataRepository repository = null; try { - repository = manager.loadRepository(stateDirURL, null); - if (repository == null) { - repository = manager.createRepository(stateDirURL, "metadata listener " + repositoryName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY); - repository.setProperty(IRepository.PROP_SYSTEM, Boolean.TRUE.toString()); + try { + return manager.loadRepository(stateDirURL, null); + } catch (ProvisionException e) { + //fall through and create new repository } + IMetadataRepository repository = manager.createRepository(stateDirURL, "Metadata listener " + repositoryName, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY); + repository.setProperty(IRepository.PROP_SYSTEM, Boolean.TRUE.toString()); + return repository; + } catch (ProvisionException e) { + LogHelper.log(e); + throw new IllegalStateException("Couldn't create listener metadata repository for: " + stateDirURL); } finally { context.ungetService(reference); } - - if (repository == null) - throw new IllegalStateException("Couldn't create listener metadata repository for: " + stateDirURL); - - return repository; } /* (non-Javadoc) |