diff options
author | Pascal Rapicault | 2009-04-29 20:18:46 +0000 |
---|---|---|
committer | Pascal Rapicault | 2009-04-29 20:18:46 +0000 |
commit | d1530272e01fcaba3091cd9dc8227902e27ed6be (patch) | |
tree | d53c841f26596a0626297a4656371cd22df621a4 /bundles/org.eclipse.equinox.p2.repository.tools | |
parent | 2a5b06a2595ae120f04ab89b5bf34330309ba13c (diff) | |
download | rt.equinox.p2-d1530272e01fcaba3091cd9dc8227902e27ed6be.tar.gz rt.equinox.p2-d1530272e01fcaba3091cd9dc8227902e27ed6be.tar.xz rt.equinox.p2-d1530272e01fcaba3091cd9dc8227902e27ed6be.zip |
Bug 264110 - Input format consistency for application and tasks
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.repository.tools')
9 files changed, 64 insertions, 16 deletions
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java index dd5fa9fe8..9f42dea80 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/CompositeRepositoryApplication.java @@ -13,6 +13,7 @@ package org.eclipse.equinox.p2.internal.repository.tools; import java.net.MalformedURLException; import java.util.*; import org.eclipse.core.runtime.*; +import org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository; import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper; import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepository; import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepositoryManager; @@ -27,13 +28,14 @@ public class CompositeRepositoryApplication extends AbstractApplication { private List childrenToAdd = new ArrayList(); private List childrenToRemove = new ArrayList(); private boolean failOnExists = false; + private String comparatorID = null; public IStatus run(IProgressMonitor monitor) throws ProvisionException { try { initializeRepos(new NullProgressMonitor()); // load repository ICompositeRepository metadataRepo = (ICompositeRepository) destinationMetadataRepository; - ICompositeRepository artifactRepo = (ICompositeRepository) destinationArtifactRepository; + CompositeArtifactRepository artifactRepo = (CompositeArtifactRepository) destinationArtifactRepository; // Remove children from the Composite Repositories for (Iterator iterator = childrenToRemove.iterator(); iterator.hasNext();) { @@ -52,6 +54,10 @@ public class CompositeRepositoryApplication extends AbstractApplication { if (child.isMetadata() && metadataRepo != null) metadataRepo.addChild(child.getRepoLocation()); } + + if (comparatorID != null) + if (!artifactRepo.validate(comparatorID)) + return new Status(IStatus.ERROR, Activator.ID, NLS.bind(Messages.CompositeRepositoryApplication_failedComparator, comparatorID)); return Status.OK_STATUS; } finally { finalizeRepositories(); @@ -170,4 +176,8 @@ public class CompositeRepositoryApplication extends AbstractApplication { if (desc.isCompressed() && !repository.getProperties().containsKey(IRepository.PROP_COMPRESSED)) repository.setProperty(IRepository.PROP_COMPRESSED, String.valueOf(true)); } + + public void setComparator(String value) { + comparatorID = value; + } } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java index 43ba46ae0..1ec043a93 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/Messages.java @@ -38,8 +38,13 @@ public class Messages extends NLS { public static String unable_to_start_exemplarysetup; public static String unknown_repository_type; + public static String MirrorApplication_artifactDestinationNoSource; + public static String MirrorApplication_metadataDestinationNoSource; + public static String MirrorApplication_missingIU; + public static String MirrorApplication_missingSourceForIUs; public static String MirrorApplication_no_IUs; public static String MirrorApplication_set_source_repositories; + public static String MirrorApplication_validateAndMirrorProblems; public static String ProcessRepo_location_not_url; public static String ProcessRepo_must_be_local; @@ -47,6 +52,9 @@ public class Messages extends NLS { public static String SlicingOption_invalid_platform; public static String exception_invalidDestination; public static String exception_invalidSource; + public static String CompositeRepositoryApplication_failedComparator; + public static String Repo2RunnableTask_errorTransforming; + public static String SlicingOption_invalidFilterFormat; static { // initialize resource bundles diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java index 0193221f0..d02cda7f1 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java @@ -55,10 +55,10 @@ public class MirrorApplication extends AbstractApplication { public IStatus run(IProgressMonitor monitor) throws ProvisionException { IStatus mirrorStatus = Status.OK_STATUS; try { - validate(); initializeRepos(new NullProgressMonitor()); - initializeIUs(); initializeLogs(); + validate(); + initializeIUs(); IQueryable slice = slice(new NullProgressMonitor()); if (destinationArtifactRepository != null) { mirrorStatus = mirrorArtifacts(slice, new NullProgressMonitor()); @@ -77,6 +77,7 @@ public class MirrorApplication extends AbstractApplication { } private IStatus mirrorArtifacts(IQueryable slice, IProgressMonitor monitor) throws ProvisionException { + // Obtain ArtifactKeys from IUs Collector ius = slice.query(InstallableUnitQuery.ANY, new Collector(), monitor); ArrayList keys = new ArrayList(ius.size()); for (Iterator iterator = ius.iterator(); iterator.hasNext();) { @@ -129,6 +130,10 @@ public class MirrorApplication extends AbstractApplication { private void validate() throws ProvisionException { if (sourceRepositories.isEmpty()) throw new ProvisionException(Messages.MirrorApplication_set_source_repositories); + if (!hasArtifactSources() && destinationArtifactRepository != null) + throw new ProvisionException(Messages.MirrorApplication_artifactDestinationNoSource); + if (!hasMetadataSources() && destinationMetadataRepository != null) + throw new ProvisionException(Messages.MirrorApplication_metadataDestinationNoSource); } /* @@ -145,11 +150,8 @@ public class MirrorApplication extends AbstractApplication { sourceIUs.add(iu); } - if (collector.size() == 0 && destinationMetadataRepository != null) { + if (collector.size() == 0 && destinationMetadataRepository != null) throw new ProvisionException(Messages.MirrorApplication_no_IUs); - } - } else { - //TODO Check that the IU is in repo } } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java index 94e52f2a4..a016e26e8 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/SlicingOptions.java @@ -11,6 +11,7 @@ package org.eclipse.equinox.p2.internal.repository.tools; import java.util.Dictionary; +import java.util.Properties; public class SlicingOptions { private boolean includeOptionalDependencies = true; @@ -53,6 +54,8 @@ public class SlicingOptions { } public Dictionary getFilter() { + if (filter == null) + filter = new Properties(); return filter; } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties index 14cc86475..0363e9ce9 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/messages.properties @@ -14,6 +14,7 @@ AbstractRepositoryTask_unableToFind=Unable to find: {0} CompositeRepository_composite_repository_exists=Composite repository already exists at location: {0} CompositeRepository_default_artifactRepo_name=Composite Artifact Repository CompositeRepository_default_metadataRepo_name=Composite Artifact Repository +CompositeRepositoryApplication_failedComparator=Artifact repository failed test with comparator: {0} no_artifactRepo_manager=Unable to acquire artifact repository manager service. no_metadataRepo_manager=Unable to acquire metadata repository manager service. @@ -23,12 +24,18 @@ unable_to_process_uri=Unable to process as URI: {0} unable_to_start_exemplarysetup=Unable to start exemplarysetup bundle. unknown_repository_type=Repository is of an unknown type: {0} +MirrorApplication_artifactDestinationNoSource=Destination artifact repository specified without a corresponding source artifact repository. +MirrorApplication_metadataDestinationNoSource=Destination metadata repository specified without a corresponding source metadata repository. +MirrorApplication_missingIU=Missing: {0} +MirrorApplication_missingSourceForIUs=Unable to locate source repository for IUs MirrorApplication_no_IUs=No IUs specified and no IUs obtained from metadata repositories. MirrorApplication_set_source_repositories=Need to set the source repository location(s). +MirrorApplication_validateAndMirrorProblems=Problems occurred during validation and mirroring ProcessRepo_location_not_url=Repository location {0} must be a URL. ProcessRepo_must_be_local=Repository must be local: {0} SlicingOption_invalid_platform=Invalid platform filter format: {0}. +SlicingOption_invalidFilterFormat=Invalid filter format: {0} exception_destinationNotModifiable = The destination repository must be modifiable: {0}. exception_invalidDestination=Invalid destination repository location: {0}. exception_invalidSource=Invalid source repository location: {0}. @@ -37,4 +44,5 @@ exception_notLocalFileRepo= {0} is not a local file based repository. exception_noEngineService=Unable to acquire engine service. exception_needIUsOrNonEmptyRepo=Need to specify either a non-empty source metadata repository or a valid list of IUs. exception_needDestinationRepo=Need to set the destination artifact repository location. -exception_onlyOneComparator=Only one comparator should be defined.
\ No newline at end of file +exception_onlyOneComparator=Only one comparator should be defined. +Repo2RunnableTask_errorTransforming=Error occurred while transforming repository.
\ No newline at end of file diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java index ec674dcc4..f1e8e9e9c 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/CompositeRepositoryTask.java @@ -62,4 +62,8 @@ public class CompositeRepositoryTask extends AbstractRepositoryTask { public void setFailOnExists(boolean value) { ((CompositeRepositoryApplication) application).setFailOnExists(value); } + + public void setValidate(String value) { + ((CompositeRepositoryApplication) application).setComparator(value); + } } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java index 5fdb90312..8be3de90d 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/IUDescription.java @@ -95,7 +95,7 @@ public class IUDescription extends DataType { queries.add(new InstallableUnitQuery(id)); queries.add(new LatestIUVersionQuery()); } else { - Version iuVersion = new Version(version); + Version iuVersion = Version.parseVersion(version); queries.add(new InstallableUnitQuery(id, iuVersion)); } } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java index d3fb10cdb..5d03cb48d 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/Repo2RunnableTask.java @@ -14,6 +14,7 @@ import java.util.List; import org.apache.tools.ant.BuildException; import org.eclipse.core.runtime.IStatus; import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException; +import org.eclipse.equinox.p2.internal.repository.tools.Messages; import org.eclipse.equinox.p2.internal.repository.tools.Repo2Runnable; /** @@ -45,13 +46,13 @@ public class Repo2RunnableTask extends AbstractRepositoryTask { application.initializeRepos(null); List ius = prepareIUs(); if ((ius == null || ius.size() == 0) && !(application.hasArtifactSources() || application.hasMetadataSources())) - throw new BuildException("Need to specify either a non-empty source metadata repository or a valid list of IUs."); + throw new BuildException(Messages.exception_needIUsOrNonEmptyRepo); application.setSourceIUs(ius); IStatus result = application.run(null); if (result.matches(IStatus.ERROR)) throw new ProvisionException(result); } catch (ProvisionException e) { - throw new BuildException("Error occurred while transforming repository.", e); + throw new BuildException(Messages.Repo2RunnableTask_errorTransforming, e); } } } diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java index c7ff268f6..79b79ae30 100644 --- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java +++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/SlicingOption.java @@ -10,7 +10,8 @@ *******************************************************************************/ package org.eclipse.equinox.p2.internal.repository.tools.tasks; -import java.util.*; +import java.util.Dictionary; +import java.util.StringTokenizer; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.eclipse.equinox.p2.internal.repository.tools.Messages; @@ -56,8 +57,6 @@ public class SlicingOption extends Task { if (tok.countTokens() != 3) throw new BuildException(NLS.bind(Messages.SlicingOption_invalid_platform, platformFilter)); Dictionary filter = options.getFilter(); - if (filter == null) - filter = new Properties(); filter.put("osgi.os", tok.nextToken().trim()); //$NON-NLS-1$ filter.put("osgi.ws", tok.nextToken().trim()); //$NON-NLS-1$ filter.put("osgi.arch", tok.nextToken().trim()); //$NON-NLS-1$ @@ -70,12 +69,25 @@ public class SlicingOption extends Task { public void setIncludeFeatures(boolean includeFeatures) { Dictionary filter = options.getFilter(); - if (filter == null) - filter = new Properties(); filter.put("org.eclipse.update.install.features", String.valueOf(includeFeatures)); //$NON-NLS-1$ options.setFilter(filter); } + public void setFilter(String filterString) { + if (filterString == null || filterString.trim().equals("")) //$NON-NLS-1$ + return; + Dictionary filter = options.getFilter(); + StringTokenizer tok = new StringTokenizer(filterString, ","); //$NON-NLS-1$ + while (tok.hasMoreTokens()) { + String rule = tok.nextToken().trim(); + int eqIndex = rule.indexOf('='); + if (eqIndex == -1) + throw new BuildException(NLS.bind(Messages.SlicingOption_invalidFilterFormat, rule)); + filter.put(rule.substring(0, eqIndex), rule.substring(eqIndex + 1)); + } + options.setFilter(filter); + } + /** * Set this property to true if only strict dependencies must be followed. A strict dependency is defined by a version range only including one version (e.g. [1.0.0.v2009, 1.0.0.v2009]) * The default value is false. |