bug 301056 - exception with empty baseline
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 574abd9..40b2e01 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
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.equinox.p2.internal.repository.tools;
-import org.eclipse.equinox.p2.metadata.VersionRange;
-
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
@@ -25,8 +23,7 @@
import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.internal.repository.mirroring.*;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+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;
@@ -197,7 +194,7 @@
return mirrorStatus;
}
- private IStatus mirrorArtifacts(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) throws ProvisionException {
+ private IStatus mirrorArtifacts(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
// Obtain ArtifactKeys from IUs
IQueryResult<IInstallableUnit> ius = slice.query(InstallableUnitQuery.ANY, monitor);
ArrayList<IArtifactKey> keys = new ArrayList<IArtifactKey>();
@@ -228,10 +225,16 @@
return result;
}
- private IArtifactRepository initializeBaseline() throws ProvisionException {
+ private IArtifactRepository initializeBaseline() {
if (baseline == null)
return null;
- return addRepository(getArtifactRepositoryManager(), baseline, 0, null);
+ try {
+ return addRepository(getArtifactRepositoryManager(), baseline, 0, null);
+ } catch (ProvisionException e) {
+ if (mirrorLog != null && e.getStatus() != null)
+ mirrorLog.log(e.getStatus());
+ return null;
+ }
}
private void mirrorMetadata(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
index 23af940..fd244eb 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.equinox.p2.tests.ant;
-import org.eclipse.equinox.p2.metadata.Version;
-
import java.io.*;
import java.net.URI;
import java.net.URISyntaxException;
@@ -23,8 +21,7 @@
import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.internal.repository.comparator.MD5ArtifactComparator;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery;
import org.eclipse.equinox.p2.query.*;
import org.eclipse.equinox.p2.repository.artifact.*;
@@ -89,6 +86,23 @@
assertEquals("Different number of IUs", getIUCount(sourceRepo2), getIUCount(destinationRepo));
}
+ public void testMirrorEmptyBaseline() throws Exception {
+ File folder = getTestFolder("MirrorEmptyBaseline");
+ String baseline = "file:" + new File(folder, "base").getAbsolutePath();
+ String dest = "file:" + new File(folder, "destination").getAbsolutePath();
+ String logFile = new File(folder, "log.txt").getAbsolutePath();
+
+ AntTaskElement mirror = new AntTaskElement("p2.artifact.mirror");
+ mirror.addAttribute("source", URIUtil.toUnencodedString(sourceRepo2));
+ mirror.addAttribute("baseline", baseline);
+ mirror.addAttribute("comparatorId", "org.eclipse.equinox.p2.repository.tools.jar.comparator");
+ mirror.addAttribute("destination", dest);
+ mirror.addAttribute("log", logFile);
+ addTask(mirror);
+ runAntTask();
+ assertLogContainsLine(new File(folder, "log.txt"), "No repository found at " + URIUtil.toUnencodedString(URIUtil.fromString(baseline)));
+ }
+
/*
* Test we can mirror from a zipped repository
*/