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
 	 */