Bug 377358 - API to disable/enable mirroring of packed artifacts
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 dcc6fec..470d47a 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
@@ -46,6 +46,7 @@
 	private List<IArtifactKey> keysToMirror;
 	private IArtifactMirrorLog comparatorLog;
 	private Transport transport;
+	private boolean includePacked = true;
 
 	private IArtifactComparator getComparator() {
 		if (comparator == null)
@@ -121,6 +122,9 @@
 	}
 
 	private IStatus mirror(IArtifactDescriptor sourceDescriptor, boolean verbose) {
+		if (!includePacked && IArtifactDescriptor.FORMAT_PACKED.equals(sourceDescriptor.getProperty(IArtifactDescriptor.FORMAT)))
+			return Status.OK_STATUS;
+
 		IArtifactDescriptor targetDescriptor = raw ? sourceDescriptor : new ArtifactDescriptor(sourceDescriptor);
 		IArtifactDescriptor baselineDescriptor = getBaselineDescriptor(sourceDescriptor);
 
@@ -313,4 +317,8 @@
 	public void setTransport(Transport transport) {
 		this.transport = transport;
 	}
+
+	public void setIncludePacked(boolean includePacked) {
+		this.includePacked = includePacked;
+	}
 }
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 15a7c7f..dd5bb6c 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
@@ -50,6 +50,7 @@
 	private boolean mirrorReferences = true;
 	private String metadataOrArtifacts = null;
 	private String[] rootIUs = null;
+	private boolean includePacked = true;
 
 	private File mirrorLogFile; // file to log mirror output to (optional)
 	private File comparatorLogFile; // file to comparator output to (optional)
@@ -201,6 +202,18 @@
 	}
 
 	private IStatus mirrorArtifacts(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
+		Mirroring mirror = getMirroring(slice, monitor);
+
+		IStatus result = mirror.run(failOnError, verbose);
+
+		if (mirrorLog != null)
+			mirrorLog.log(result);
+		else
+			LogHelper.log(result);
+		return result;
+	}
+
+	protected Mirroring getMirroring(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
 		// Obtain ArtifactKeys from IUs
 		IQueryResult<IInstallableUnit> ius = slice.query(QueryUtil.createIUAnyQuery(), monitor);
 		ArrayList<IArtifactKey> keys = new ArrayList<IArtifactKey>();
@@ -216,6 +229,7 @@
 		mirror.setValidate(validate);
 		mirror.setCompareExclusions(compareExclusions);
 		mirror.setTransport((Transport) agent.getService(Transport.SERVICE_NAME));
+		mirror.setIncludePacked(includePacked);
 
 		// If IUs have been specified then only they should be mirrored, otherwise mirror everything.
 		if (keys.size() > 0)
@@ -223,14 +237,7 @@
 
 		if (comparatorLog != null)
 			mirror.setComparatorLog(comparatorLog);
-
-		IStatus result = mirror.run(failOnError, verbose);
-
-		if (mirrorLog != null)
-			mirrorLog.log(result);
-		else
-			LogHelper.log(result);
-		return result;
+		return mirror;
 	}
 
 	private IArtifactRepository initializeBaseline() {
@@ -450,4 +457,8 @@
 	public void setComparatorExclusions(IQuery<IArtifactDescriptor> exclusions) {
 		compareExclusions = exclusions;
 	}
+
+	public void setIncludePacked(boolean includePacked) {
+		this.includePacked = includePacked;
+	}
 }
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 6368f01..b24750d 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
@@ -133,4 +133,8 @@
 	public void setValidate(boolean value) {
 		((MirrorApplication) application).setValidate(value);
 	}
+
+	public void setIncludePacked(boolean value) {
+		((MirrorApplication) application).setIncludePacked(value);
+	}
 }