Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2010-02-11 01:27:59 +0000
committerAndrew Niefer2010-02-11 01:27:59 +0000
commitb1643fb0dd4cc405c15575ca42415a27bfa710fd (patch)
tree4c7230fe7c2989a4df5c9c347f75bf6b1199450b /bundles/org.eclipse.equinox.p2.repository.tools
parent32c724f43579233028fc48080904606382a4318c (diff)
downloadrt.equinox.p2-b1643fb0dd4cc405c15575ca42415a27bfa710fd.tar.gz
rt.equinox.p2-b1643fb0dd4cc405c15575ca42415a27bfa710fd.tar.xz
rt.equinox.p2-b1643fb0dd4cc405c15575ca42415a27bfa710fd.zip
bug 302283 - exclude artifacts from compare
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.repository.tools')
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/plugin.xml8
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java88
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java10
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java77
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ComparatorDescription.java18
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ElementList.java29
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java25
7 files changed, 213 insertions, 42 deletions
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/plugin.xml b/bundles/org.eclipse.equinox.p2.repository.tools/plugin.xml
index db08b32e6..f48caf239 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/plugin.xml
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/plugin.xml
@@ -151,5 +151,13 @@
</run>
</application>
</extension>
+ <extension
+ point="org.eclipse.ant.core.antTypes">
+ <antType
+ class="org.eclipse.equinox.p2.internal.repository.tools.tasks.ArtifactDescription"
+ library="lib/repository-tools-ant.jar"
+ name="artifact">
+ </antType>
+ </extension>
</plugin>
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
index 8d2b993ad..c14a95119 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/mirroring/Mirroring.java
@@ -11,19 +11,20 @@
*******************************************************************************/
package org.eclipse.equinox.p2.internal.repository.mirroring;
-import org.eclipse.equinox.p2.repository.tools.comparator.ArtifactComparatorFactory;
-import org.eclipse.equinox.p2.repository.tools.comparator.IArtifactComparator;
-
import java.util.*;
import org.eclipse.core.runtime.*;
import org.eclipse.equinox.internal.p2.artifact.repository.RawMirrorRequest;
+import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.internal.repository.tools.Activator;
import org.eclipse.equinox.p2.internal.repository.tools.Messages;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
+import org.eclipse.equinox.p2.query.IQuery;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.repository.artifact.*;
import org.eclipse.equinox.p2.repository.artifact.spi.ArtifactDescriptor;
+import org.eclipse.equinox.p2.repository.tools.comparator.ArtifactComparatorFactory;
+import org.eclipse.equinox.p2.repository.tools.comparator.IArtifactComparator;
import org.eclipse.osgi.util.NLS;
/**
@@ -37,6 +38,8 @@ public class Mirroring {
private boolean compare = false;
private boolean validate = false;
private IArtifactComparator comparator;
+ private IQuery<IArtifactDescriptor> compareExclusionQuery = null;
+ private Set<IArtifactDescriptor> compareExclusions = CollectionUtils.<IArtifactDescriptor> emptySet();
private String comparatorID;
private List<IArtifactKey> keysToMirror;
private IArtifactMirrorLog comparatorLog;
@@ -86,6 +89,12 @@ public class Mirroring {
IQueryResult<IArtifactKey> result = source.query(ArtifactKeyQuery.ALL_KEYS, null);
keys = result.iterator();
}
+
+ if (compareExclusionQuery != null) {
+ IQueryResult<IArtifactDescriptor> exclusions = source.descriptorQueryable().query(compareExclusionQuery, null);
+ compareExclusions = exclusions.unmodifiableSet();
+ }
+
while (keys.hasNext()) {
IArtifactKey key = keys.next();
IArtifactDescriptor[] descriptors = source.getArtifactDescriptors(key);
@@ -108,44 +117,48 @@ public class Mirroring {
return multiStatus;
}
- private IStatus mirror(IArtifactDescriptor descriptor, boolean verbose) {
- IArtifactDescriptor newDescriptor = raw ? descriptor : new ArtifactDescriptor(descriptor);
+ private IStatus mirror(IArtifactDescriptor sourceDescriptor, boolean verbose) {
+ IArtifactDescriptor targetDescriptor = raw ? sourceDescriptor : new ArtifactDescriptor(sourceDescriptor);
+ IArtifactDescriptor baselineDescriptor = getBaselineDescriptor(sourceDescriptor);
if (verbose)
- System.out.println("Mirroring: " + descriptor.getArtifactKey() + " (Descriptor: " + descriptor + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-
- if (compare && baseline != null)
- if (baseline.contains(descriptor)) {
- // we have to create an output stream based on the descriptor found in the baseline otherwise all
- // the properties will be copied over from the wrong descriptor and our repository will be inconsistent.
- IArtifactDescriptor baselineDescriptor = getBaselineDescriptor(descriptor);
-
- // if we found a descriptor in the baseline then we'll use it to copy the artifact
- if (baselineDescriptor != null) {
- MultiStatus status = new MultiStatus(Activator.ID, IStatus.OK, NLS.bind(Messages.Mirroring_compareAndDownload, descriptor), null);
- //Compare source against baseline
- IStatus comparison = getComparator().compare(baseline, baselineDescriptor, source, descriptor);
- if (comparatorLog != null)
- comparatorLog.log(baselineDescriptor, comparison);
- status.add(comparison);
- if (destination.contains(baselineDescriptor))
- return compareToDestination(baselineDescriptor);
-
- //download artifact from baseline
- status.add(downloadArtifact(baseline, baselineDescriptor, baselineDescriptor));
- return status;
+ System.out.println("Mirroring: " + sourceDescriptor.getArtifactKey() + " (Descriptor: " + sourceDescriptor + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+ MultiStatus compareStatus = new MultiStatus(Activator.ID, IStatus.OK, null, null);
+ boolean comparing = compare && !compareExclusions.contains(sourceDescriptor);
+ if (comparing) {
+ if (baselineDescriptor != null) {
+ //compare source & baseline
+ compareStatus.add(compare(baseline, baselineDescriptor, source, sourceDescriptor));
+ //compare baseline & destination
+ if (destination.contains(baselineDescriptor)) {
+ compareStatus.add(compareToDestination(baselineDescriptor));
+ return compareStatus;
}
+ } else if (destination.contains(targetDescriptor)) {
+ compareStatus.add(compareToDestination(sourceDescriptor));
+ return compareStatus;
}
+ }
- // Check if the destination already contains the file.
- if (destination.contains(newDescriptor)) {
- if (compare)
- return compareToDestination(descriptor);
- String message = NLS.bind(Messages.mirror_alreadyExists, descriptor, destination);
- return new Status(IStatus.INFO, Activator.ID, ProvisionException.ARTIFACT_EXISTS, message, null);
+ //from source or baseline
+ IArtifactRepository sourceRepository = baselineDescriptor != null ? baseline : source;
+ sourceDescriptor = baselineDescriptor != null ? baselineDescriptor : sourceDescriptor;
+ targetDescriptor = baselineDescriptor != null ? baselineDescriptor : targetDescriptor;
+ IStatus status = null;
+ if (!destination.contains(targetDescriptor))
+ //actual download
+ status = downloadArtifact(sourceRepository, targetDescriptor, sourceDescriptor);
+ else {
+ String message = NLS.bind(Messages.mirror_alreadyExists, sourceDescriptor, destination);
+ status = new Status(IStatus.INFO, Activator.ID, ProvisionException.ARTIFACT_EXISTS, message, null);
}
- return downloadArtifact(source, newDescriptor, descriptor);
+ if (comparing) {
+ compareStatus.add(status);
+ return compareStatus;
+ }
+ return status;
}
/**
@@ -195,6 +208,9 @@ public class Mirroring {
* Get the equivalent descriptor from the baseline repository
*/
private IArtifactDescriptor getBaselineDescriptor(IArtifactDescriptor descriptor) {
+ if (baseline == null || !baseline.contains(descriptor))
+ return null;
+
IArtifactDescriptor[] baselineDescriptors = baseline.getArtifactDescriptors(descriptor.getArtifactKey());
for (int i = 0; i < baselineDescriptors.length; i++) {
if (baselineDescriptors[i].equals(descriptor))
@@ -288,4 +304,8 @@ public class Mirroring {
return -1;
}
}
+
+ public void setCompareExclusions(IQuery<IArtifactDescriptor> excludedKeys) {
+ compareExclusionQuery = excludedKeys;
+ }
}
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 40b2e0163..9f5665b82 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
@@ -25,8 +25,8 @@ import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.internal.repository.mirroring.*;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery;
-import org.eclipse.equinox.p2.query.IQueryResult;
-import org.eclipse.equinox.p2.query.IQueryable;
+import org.eclipse.equinox.p2.query.*;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
import org.eclipse.equinox.p2.repository.artifact.IArtifactRepository;
import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository;
import org.eclipse.osgi.util.NLS;
@@ -39,6 +39,7 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
private URI baseline;
private String comparatorID;
+ private IQuery<IArtifactDescriptor> compareExclusions = null;
private boolean compare = false;
private boolean failOnError = true;
private boolean raw = true;
@@ -208,6 +209,7 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
mirror.setComparatorId(comparatorID);
mirror.setBaseline(initializeBaseline());
mirror.setValidate(validate);
+ mirror.setCompareExclusions(compareExclusions);
// If IUs have been specified then only they should be mirrored, otherwise mirror everything.
if (keys.size() > 0)
@@ -407,4 +409,8 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
public void setValidate(boolean value) {
validate = value;
}
+
+ public void setComparatorExclusions(IQuery<IArtifactDescriptor> exclusions) {
+ compareExclusions = exclusions;
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java
new file mode 100644
index 000000000..09d09b7e2
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ArtifactDescription.java
@@ -0,0 +1,77 @@
+package org.eclipse.equinox.p2.internal.repository.tools.tasks;
+
+import java.util.Properties;
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.Parameter;
+import org.eclipse.equinox.p2.metadata.*;
+import org.eclipse.equinox.p2.query.IQuery;
+import org.eclipse.equinox.p2.repository.artifact.*;
+
+public class ArtifactDescription extends DataType {
+
+ private String classifier = null;
+ private String id = null;
+ private String version = null;
+ private String range = null;
+ private Properties properties = null;
+
+ public void setClassifier(String classifier) {
+ this.classifier = classifier;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public void setRange(String range) {
+ this.range = range;
+ }
+
+ public void addConfiguredProperty(Parameter property) {
+ if (properties == null)
+ properties = new Properties();
+
+ properties.put(property.getName(), property.getValue());
+ }
+
+ public String getClassifier() {
+ return classifier;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public IQuery<IArtifactKey> createKeyQuery() {
+ VersionRange keyRange = null;
+ if (range != null)
+ keyRange = new VersionRange(range);
+ else if (version != null) {
+ Version keyVersion = Version.parseVersion(version);
+ keyRange = new VersionRange(keyVersion, true, keyVersion, true);
+ }
+ return new ArtifactKeyQuery(classifier, id, keyRange);
+ }
+
+ public IQuery<IArtifactDescriptor> createDescriptorQuery() {
+ VersionRange keyRange = null;
+ if (range != null)
+ keyRange = new VersionRange(range);
+ else if (version != null) {
+ Version keyVersion = Version.parseVersion(version);
+ keyRange = new VersionRange(keyVersion, true, keyVersion, true);
+ }
+
+ ArtifactDescriptorQuery query = new ArtifactDescriptorQuery(id, keyRange, null);
+ query.setProperties(properties);
+ return query;
+ }
+}
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ComparatorDescription.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ComparatorDescription.java
index 9ec3fc38b..437a6dd0b 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ComparatorDescription.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ComparatorDescription.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -11,13 +11,15 @@
package org.eclipse.equinox.p2.internal.repository.tools.tasks;
import java.io.File;
+import java.util.List;
import org.apache.tools.ant.types.DataType;
public class ComparatorDescription extends DataType {
- DestinationRepository baseline;
- String comparatorId;
- File comparatorLog;
+ private DestinationRepository baseline;
+ private String comparatorId;
+ private File comparatorLog;
+ private List<ArtifactDescription> excludedArtifacts = null;
/*
* Set the baseline repository to compare to
@@ -26,6 +28,10 @@ public class ComparatorDescription extends DataType {
this.baseline = value;
}
+ public void addConfiguredExclude(ElementList<ArtifactDescription> excludeList) {
+ excludedArtifacts = excludeList.getElements();
+ }
+
/*
* Set the comparator to use
*/
@@ -51,4 +57,8 @@ public class ComparatorDescription extends DataType {
public File getComparatorLog() {
return comparatorLog;
}
+
+ public List<ArtifactDescription> getExcluded() {
+ return excludedArtifacts;
+ }
}
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ElementList.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ElementList.java
new file mode 100644
index 000000000..6968e4217
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/ElementList.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.equinox.p2.internal.repository.tools.tasks;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.tools.ant.types.DataType;
+
+public class ElementList<T> extends DataType {
+
+ private List<T> elements = new ArrayList<T>();
+
+ public void addConfigured(T element) {
+ elements.add(element);
+ }
+
+ public List<T> getElements() {
+ return elements;
+ }
+}
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
index 71f2b8bda..cb4662088 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
@@ -10,15 +10,18 @@
*******************************************************************************/
package org.eclipse.equinox.p2.internal.repository.tools.tasks;
-import org.eclipse.equinox.p2.core.ProvisionException;
-
import java.io.File;
+import java.util.ArrayList;
import java.util.List;
import org.apache.tools.ant.BuildException;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.internal.repository.tools.Messages;
import org.eclipse.equinox.p2.internal.repository.tools.MirrorApplication;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.query.CompoundQuery;
+import org.eclipse.equinox.p2.query.IQuery;
+import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor;
public class MirrorTask extends AbstractRepositoryTask {
@@ -48,6 +51,7 @@ public class MirrorTask extends AbstractRepositoryTask {
// Set comparator log
if (comparator.getComparatorLog() != null)
((MirrorApplication) application).setComparatorLog(comparator.getComparatorLog());
+ ((MirrorApplication) application).setComparatorExclusions(createCompareExclusions());
}
prepareSourceRepos();
@@ -65,6 +69,23 @@ public class MirrorTask extends AbstractRepositoryTask {
}
}
+ private IQuery<IArtifactDescriptor> createCompareExclusions() {
+ if (comparator == null || comparator.getExcluded() == null)
+ return null;
+
+ List<ArtifactDescription> artifacts = comparator.getExcluded();
+ List<IQuery<IArtifactDescriptor>> queries = new ArrayList<IQuery<IArtifactDescriptor>>();
+ for (ArtifactDescription artifactDescription : artifacts)
+ queries.add(artifactDescription.createDescriptorQuery());
+
+ if (queries.size() == 1)
+ return queries.get(0);
+
+ @SuppressWarnings("unchecked")
+ IQuery<IArtifactDescriptor>[] array = queries.toArray(new IQuery[queries.size()]);
+ return CompoundQuery.<IArtifactDescriptor> createCompoundQuery(array, false);
+ }
+
public SlicingOption createSlicingOptions() {
SlicingOption options = new SlicingOption();
((MirrorApplication) application).setSlicingOptions(options.getOptions());

Back to the top