### Eclipse Workspace Patch 1.0
#P org.eclipse.equinox.p2.engine
Index: src/org/eclipse/equinox/internal/provisional/p2/engine/InstallableUnitPhase.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/provisional/p2/engine/InstallableUnitPhase.java,v
retrieving revision 1.2
diff -u -r1.2 InstallableUnitPhase.java
--- src/org/eclipse/equinox/internal/provisional/p2/engine/InstallableUnitPhase.java	7 Apr 2008 22:11:49 -0000	1.2
+++ src/org/eclipse/equinox/internal/provisional/p2/engine/InstallableUnitPhase.java	16 Apr 2008 15:33:41 -0000
@@ -8,7 +8,7 @@
 import org.eclipse.osgi.util.NLS;
 
 public abstract class InstallableUnitPhase extends Phase {
-
+	protected ProvisioningContext fContext = null;
 	protected static final String PARM_ARTIFACT_REQUESTS = "artifactRequests"; //$NON-NLS-1$
 	protected static final String PARM_ARTIFACT = "artifact"; //$NON-NLS-1$
 	protected static final String PARM_IU = "iu"; //$NON-NLS-1$
@@ -21,6 +21,7 @@
 	}
 
 	void perform(MultiStatus status, EngineSession session, IProfile profile, Operand[] operands, ProvisioningContext context, IProgressMonitor monitor) {
+		fContext = context;
 		touchpointToTouchpointParameters = new HashMap();
 		for (int i = 0; i < operands.length; i++) {
 			if (!(operands[i] instanceof InstallableUnitOperand))
Index: src/org/eclipse/equinox/internal/provisional/p2/engine/ProvisioningContext.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/provisional/p2/engine/ProvisioningContext.java,v
retrieving revision 1.4
diff -u -r1.4 ProvisioningContext.java
--- src/org/eclipse/equinox/internal/provisional/p2/engine/ProvisioningContext.java	25 Mar 2008 19:48:22 -0000	1.4
+++ src/org/eclipse/equinox/internal/provisional/p2/engine/ProvisioningContext.java	16 Apr 2008 15:33:41 -0000
@@ -10,25 +10,41 @@
 
 import java.net.URL;
 import java.util.*;
+import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepository;
 
 public class ProvisioningContext {
 	private URL[] metadataRepositories;
+	/** list of URLs this context supports as potential arti repos */
+	private URL[] artifactRepositories;
 	private Properties properties = new Properties();
 	private List extraIUs = new ArrayList();
 
 	public ProvisioningContext() {
 		// null repos means look at them all
 		metadataRepositories = null;
+		artifactRepositories = null;
 	}
 
 	public ProvisioningContext(URL[] metadataRepositories) {
 		this.metadataRepositories = metadataRepositories;
 	}
 
+	/**
+	 * Set the URL[] of potential locations for future {@link IArtifactRepository}s
+	 * @param artifactRepositories primitive array of URLs
+	*/
+	public void setArtifactRepositories(URL[] artifactRepositories) {
+		this.artifactRepositories = artifactRepositories;
+	}
+
 	public URL[] getMetadataRepositories() {
 		return metadataRepositories;
 	}
 
+	public URL[] getArtifactRepositories() {
+		return artifactRepositories;
+	}
+
 	public String getProperty(String key) {
 		return properties.getProperty(key);
 	}
Index: src/org/eclipse/equinox/internal/provisional/p2/engine/phases/Collect.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/provisional/p2/engine/phases/Collect.java,v
retrieving revision 1.4
diff -u -r1.4 Collect.java
--- src/org/eclipse/equinox/internal/provisional/p2/engine/phases/Collect.java	7 Apr 2008 22:11:50 -0000	1.4
+++ src/org/eclipse/equinox/internal/provisional/p2/engine/phases/Collect.java	16 Apr 2008 15:33:41 -0000
@@ -47,7 +47,7 @@
 	protected IStatus completeInstallableUnitPhase(IProgressMonitor monitor, IProfile profile, Map parameters) {
 		List artifactRequests = (List) parameters.get(PARM_ARTIFACT_REQUESTS);
 
-		DownloadManager dm = new DownloadManager();
+		DownloadManager dm = new DownloadManager(fContext);
 		for (Iterator it = artifactRequests.iterator(); it.hasNext();) {
 			IArtifactRequest[] requests = (IArtifactRequest[]) it.next();
 			dm.add(requests);
Index: src/org/eclipse/equinox/internal/p2/engine/DownloadManager.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/DownloadManager.java,v
retrieving revision 1.1
diff -u -r1.1 DownloadManager.java
--- src/org/eclipse/equinox/internal/p2/engine/DownloadManager.java	15 Feb 2008 17:05:22 -0000	1.1
+++ src/org/eclipse/equinox/internal/p2/engine/DownloadManager.java	16 Apr 2008 15:33:41 -0000
@@ -16,14 +16,25 @@
 import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
 import org.eclipse.equinox.internal.provisional.p2.artifact.repository.*;
 import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
+import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningContext;
 
 public class DownloadManager {
-
+	/** Remembered context this Manager is operating in */
+	private ProvisioningContext fContext = null;
 	ArrayList requestsToProcess = new ArrayList();
 
 	private static final String FILE_PROTOCOL = "file"; //$NON-NLS-1$
 
 	/**
+	 * Constructor requesting the context this manager should live in.
+	 * 
+	 * @param context {@link ProvisioningContext} to operate on, can be null resulting in context-less mode
+	*/
+	public DownloadManager(ProvisioningContext context) {
+		fContext = context;
+	}
+
+	/**
 	 * This Comparator sorts the repositories such that īlocalī repositories are first 
 	 */
 	private static final Comparator LOCAL_FIRST_COMPARATOR = new Comparator() {
@@ -68,14 +79,21 @@
 
 	/*
 	 * Start the downloads. Return a status message indicating success or failure of the overall operation
-	 */
+	 * Try to use the provisioning context in order to retrieve the arti-repo-URLs, fall back to the repo manager if there are none...
+	 * @param monitor {@link IProgressMonitor} that shall be kept up2date  
+	*/
 	public IStatus start(IProgressMonitor monitor) {
 		SubMonitor subMonitor = SubMonitor.convert(monitor, Messages.download_artifact, requestsToProcess.size());
 		try {
 			if (requestsToProcess.isEmpty())
 				return Status.OK_STATUS;
+			/** Get the manager, if we don't need it for a list of known repos we still need him to load the repos.. */
 			IArtifactRepositoryManager repoMgr = (IArtifactRepositoryManager) ServiceHelper.getService(EngineActivator.getContext(), IArtifactRepositoryManager.class.getName());
-			URL[] repositories = repoMgr.getKnownRepositories(IArtifactRepositoryManager.REPOSITORIES_ALL);
+			URL[] repositories = null;
+			if (fContext == null || fContext.getArtifactRepositories() == null || fContext.getArtifactRepositories().length == 0)
+				repositories = repoMgr.getKnownRepositories(IArtifactRepositoryManager.REPOSITORIES_ALL);
+			else
+				repositories = fContext.getArtifactRepositories();
 			if (repositories.length == 0)
 				return new Status(IStatus.ERROR, EngineActivator.ID, Messages.download_no_repository);
 			Arrays.sort(repositories, LOCAL_FIRST_COMPARATOR);
#P org.eclipse.equinox.p2.tests
Index: src/org/eclipse/equinox/p2/tests/download/DownloadManagerTest.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.equinox/p2/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/download/DownloadManagerTest.java,v
retrieving revision 1.4
diff -u -r1.4 DownloadManagerTest.java
--- src/org/eclipse/equinox/p2/tests/download/DownloadManagerTest.java	15 Feb 2008 17:05:25 -0000	1.4
+++ src/org/eclipse/equinox/p2/tests/download/DownloadManagerTest.java	16 Apr 2008 15:34:23 -0000
@@ -26,7 +26,7 @@
 	 * Tests invocation of DownloadManager when there is nothing to download.
 	 */
 	public void testEmpty() {
-		DownloadManager manager = new DownloadManager();
+		DownloadManager manager = new DownloadManager(null);
 		IStatus result = manager.start(null);
 		assertTrue("1.0", result.isOK());
 	}
