Bug 394434 - [mirror] Can't disable reference mirroring
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 dd5bb6c..b724824 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
@@ -152,6 +152,8 @@
 				mirrorLogLocation = new File(arg);
 			} else if (args[i - 1].equalsIgnoreCase("-roots")) { //$NON-NLS-1$
 				rootIUs = getArrayArgsFromString(arg, ","); //$NON-NLS-1$
+			} else if (args[i - 1].equalsIgnoreCase("-references")) {//$NON-NLS-1$
+				mirrorReferences = Boolean.parseBoolean(args[i]);
 			} else {
 				try {
 					if (args[i - 1].equalsIgnoreCase("-source")) { //$NON-NLS-1$
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
index 902cf3d..0811233 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorArtifactsTask.java
@@ -35,6 +35,7 @@
 	boolean ignoreErrors = false;
 	boolean raw = false; // use raw artifact descriptors?
 	boolean verbose = false;
+	boolean references = true;
 
 	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.Task#execute()
@@ -62,6 +63,7 @@
 		app.setCompare(compare);
 		app.setComparatorID(comparatorID);
 		app.setBaseline(baseline);
+		app.setReferences(references);
 		if (comparatorLog != null)
 			app.setComparatorLog(comparatorLog);
 		if (mirrorLog != null)
@@ -77,7 +79,7 @@
 		try {
 			app.run(null);
 		} catch (Exception e) {
-			throw new BuildException("Exception while running mirror application.", e);
+			throw new BuildException("Exception while running mirror application.", e); //$NON-NLS-1$
 		}
 	}
 
@@ -178,4 +180,11 @@
 	public void setVerbose(boolean value) {
 		verbose = value;
 	}
+
+	/*
+	 * Set whether the repository references should be copied to the new repository
+	 */
+	public void setReferences(boolean value) {
+		references = value;
+	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
index 3fd6fec..20b058a 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorMetadataTask.java
@@ -28,6 +28,7 @@
 	URI destination;
 	String destinationName;
 	String writeMode;
+	boolean references = true;
 
 	/* (non-Javadoc)
 	 * @see org.apache.tools.ant.Task#execute()
@@ -48,6 +49,7 @@
 		MirrorApplication app = new MirrorApplication();
 		app.addDestination(destinationRepo);
 		app.addSource(sourceRepo);
+		app.setReferences(references);
 		try {
 			IStatus result = app.run(null);
 			if (result.getSeverity() != IStatus.OK)
@@ -92,4 +94,8 @@
 	public void setWriteMode(String value) {
 		writeMode = value;
 	}
+
+	public void setReferences(boolean value) {
+		references = value;
+	}
 }
\ 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/MirrorTask.java b/bundles/org.eclipse.equinox.p2.repository.tools/src_ant/org/eclipse/equinox/p2/internal/repository/tools/tasks/MirrorTask.java
index b24750d..f9d5a94 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
@@ -137,4 +137,8 @@
 	public void setIncludePacked(boolean value) {
 		((MirrorApplication) application).setIncludePacked(value);
 	}
+
+	public void setReferences(boolean value) {
+		((MirrorApplication) application).setReferences(value);
+	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationMetadataTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationMetadataTest.java
index 21198de..7a032fc 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationMetadataTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationMetadataTest.java
@@ -985,6 +985,26 @@
 
 		IMetadataRepository destRepo = getMetadataRepositoryManager().loadRepository(destRepoLocation.toURI(), null);
 		Collection<IRepositoryReference> destRefs = destRepo.getReferences();
-		assertEquals(destRefs.size(), 4);
+		assertEquals(4, destRefs.size());
+	}
+
+	public void testMirrorWithoutReferences() throws Exception {
+		MirrorApplication app = new MirrorApplication();
+		RepositoryDescriptor dest = new RepositoryDescriptor();
+		dest.setLocation(destRepoLocation.toURI());
+		dest.setAppend(false);
+		dest.setKind("metadata");
+		app.addDestination(dest);
+
+		RepositoryDescriptor src = new RepositoryDescriptor();
+		src.setLocation(sourceRepoWithRefs.toURI());
+		src.setKind("metadata");
+		app.addSource(src);
+		app.setReferences(false);
+		app.run(null);
+
+		IMetadataRepository destRepo = getMetadataRepositoryManager().loadRepository(destRepoLocation.toURI(), null);
+		Collection<IRepositoryReference> destRefs = destRepo.getReferences();
+		assertEquals(0, destRefs.size());
 	}
 }