From 08631a0ea3cfd374f93eb7456e475bb1acdab403 Mon Sep 17 00:00:00 2001 From: Jan Sievers Date: Fri, 11 Jan 2013 15:42:54 +0100 Subject: [PATCH] 395281 allow to resolve without reactor project nor local repo - used for resolving the runtime of eclipserun-plugin independent of the project and its target platform - add setter to TargetPlatformBuilder to control whether IUs installed in local maven repo should be part of the target platform Bug: 395281 Change-Id: Idba050a286c0f657093d8c28196ddd2d9358a83f --- .../local/LocalMetadataRepositoryTest.java | 16 -------- .../local/LocalMetadataRepository.java | 24 ----------- .../p2/impl/resolver/P2ResolverTest.java | 30 +++++++------- .../p2/impl/resolver/P2ResolverTestBase.java | 16 ++++++-- .../resolver/TargetPlatformBuilderTest.java | 25 +++++++++++ .../tycho/artifacts/p2/P2TargetPlatform.java | 6 +-- .../impl/resolver/P2ResolverFactoryImpl.java | 7 ---- .../p2/impl/resolver/P2ResolverImpl.java | 32 ++++++++++----- .../p2/target/TargetPlatformBuilderImpl.java | 41 ++++++++++++++----- .../tycho/p2/target/TargetPlatformImpl.java | 21 +++++----- .../tycho/p2/resolver/facade/P2Resolver.java | 5 ++- .../target/facade/TargetPlatformBuilder.java | 2 + .../p2/resolver/P2TargetPlatformResolver.java | 2 +- 13 files changed, 122 insertions(+), 105 deletions(-) diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java index 2631c2a755..8a89a5d413 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java +++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository.tests/src/test/java/org/eclipse/tycho/repository/local/LocalMetadataRepositoryTest.java @@ -29,7 +29,6 @@ import org.eclipse.equinox.p2.query.QueryUtil; import org.eclipse.equinox.p2.repository.metadata.IMetadataRepository; import org.eclipse.tycho.p2.impl.repo.FileBasedTychoRepositoryIndex; -import org.eclipse.tycho.p2.repository.GAV; import org.eclipse.tycho.p2.repository.LocalRepositoryReader; import org.eclipse.tycho.p2.repository.RepositoryLayoutHelper; import org.eclipse.tycho.p2.repository.TychoRepositoryIndex; @@ -61,21 +60,6 @@ private LocalMetadataRepository createRepository(File location) throws Provision return new LocalMetadataRepository(location.toURI(), metadataIndex); } - @Test - public void testIncludeInTargetPlatformFalse() throws Exception { - LocalMetadataRepository repository = createRepository(tempFolder.newFolder()); - repository.setIncludeInTargetPlatform(false); - InstallableUnitDescription iud = new MetadataFactory.InstallableUnitDescription(); - iud.setId("test"); - iud.setVersion(Version.parseVersion("1.0.0")); - IInstallableUnit iu = MetadataFactory.createInstallableUnit(iud); - repository.addInstallableUnit(iu, new GAV("groupId", "artifactId", "version")); - - IQueryResult result = repository.query(QueryUtil.ALL_UNITS, monitor); - ArrayList allius = new ArrayList(result.toSet()); - Assert.assertEquals(0, allius.size()); - } - @Test public void addInstallableUnit() throws CoreException { File location = new File("target/metadataRepo"); diff --git a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalMetadataRepository.java b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalMetadataRepository.java index c55e1efbcd..1edfde3df6 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalMetadataRepository.java +++ b/tycho-bundles/org.eclipse.tycho.p2.maven.repository/src/main/java/org/eclipse/tycho/repository/local/LocalMetadataRepository.java @@ -14,15 +14,10 @@ import java.io.IOException; import java.net.URI; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; -import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.equinox.p2.metadata.IInstallableUnit; -import org.eclipse.equinox.p2.query.CollectionResult; -import org.eclipse.equinox.p2.query.IQuery; -import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.tycho.p2.maven.repository.AbstractMavenMetadataRepository; import org.eclipse.tycho.p2.maven.repository.xmlio.MetadataIO; import org.eclipse.tycho.p2.repository.GAV; @@ -33,8 +28,6 @@ public class LocalMetadataRepository extends AbstractMavenMetadataRepository { private Set changedGAVs = new LinkedHashSet(); - // TODO this shouldn't be handled here - private boolean includeInTargetPlatform = true; /** * Create new repository @@ -56,15 +49,6 @@ public LocalMetadataRepository(URI location, TychoRepositoryIndex projectIndex, super(location, projectIndex, contentLocator); } - @Override - public IQueryResult query(IQuery query, IProgressMonitor monitor) { - if (includeInTargetPlatform) { - return super.query(query, monitor); - } else { - return new CollectionResult(Collections. emptyList()); - } - } - @Override public void addInstallableUnits(Collection newUnits) { for (IInstallableUnit unit : newUnits) { @@ -128,12 +112,4 @@ public boolean isModifiable() { return true; } - public void setIncludeInTargetPlatform(boolean value) { - this.includeInTargetPlatform = value; - } - - public boolean getIncludeInTargetPlatform() { - return includeInTargetPlatform; - } - } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTest.java index 7b220c54d3..5342b45bfa 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTest.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTest.java @@ -60,7 +60,7 @@ public void basic() throws Exception { String artifactId = "org.eclipse.tycho.p2.impl.resolver.test.bundle01"; addReactorProject(bundle, TYPE_ECLIPSE_PLUGIN, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -116,7 +116,7 @@ public void duplicateInstallableUnit() throws Exception { addReactorProject(resourceFile("duplicate-iu/featureA2"), TYPE_ECLIPSE_FEATURE, "featureA2"); try { - impl.resolveProject(context.buildTargetPlatform(), projectLocation); + impl.resolveDependencies(context.buildTargetPlatform(), projectLocation); fail(); } catch (DuplicateReactorIUsException e) { // TODO proper assertion @@ -129,7 +129,7 @@ public void featureInstallableUnits() throws Exception { String artifactId = "org.eclipse.tycho.p2.impl.resolver.test.feature01"; addReactorProject(feature, TYPE_ECLIPSE_FEATURE, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), feature); + List results = impl.resolveDependencies(context.buildTargetPlatform(), feature); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -156,7 +156,7 @@ public void sourceBundle() throws Exception { sb.setDependencyMetadata(metadata); context.addReactorArtifact(sb); - List results = impl.resolveProject(context.buildTargetPlatform(), feature); + List results = impl.resolveDependencies(context.buildTargetPlatform(), feature); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -188,7 +188,7 @@ public void eclipseRepository() throws Exception { addContextProject(resourceFile("resolver/bundle01"), TYPE_ECLIPSE_PLUGIN); - List results = impl.resolveProject(context.buildTargetPlatform(), projectDir); + List results = impl.resolveDependencies(context.buildTargetPlatform(), projectDir); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -208,7 +208,7 @@ public void bundleUsesSWT() throws Exception { String artifactId = "org.eclipse.tycho.p2.impl.resolver.test.bundleUsesSWT"; addReactorProject(bundle, TYPE_ECLIPSE_PLUGIN, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -227,7 +227,7 @@ public void swt() throws Exception { File swtFragment = resourceFile("resolver/swt/swtFragment"); addReactorProject(swtFragment, TYPE_ECLIPSE_PLUGIN, "org.eclipse.tycho.p2.impl.resolver.test.swtFragment"); - List results = impl.resolveProject(context.buildTargetPlatform(), swt); + List results = impl.resolveDependencies(context.buildTargetPlatform(), swt); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -243,7 +243,7 @@ public void swtFragment() throws Exception { File swtFragment = resourceFile("resolver/swt/swtFragment"); addReactorProject(swtFragment, TYPE_ECLIPSE_PLUGIN, "org.eclipse.tycho.p2.impl.resolver.test.swtFragment"); - List results = impl.resolveProject(context.buildTargetPlatform(), swtFragment); + List results = impl.resolveDependencies(context.buildTargetPlatform(), swtFragment); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -262,7 +262,7 @@ public void swtFragmentWithRemoteSWT() throws Exception { File swtFragment = resourceFile("resolver/swt/swtFragment"); addReactorProject(swtFragment, TYPE_ECLIPSE_PLUGIN, "org.eclipse.tycho.p2.impl.resolver.test.swtFragment"); - List results = impl.resolveProject(context.buildTargetPlatform(), swtFragment); + List results = impl.resolveDependencies(context.buildTargetPlatform(), swtFragment); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -299,7 +299,7 @@ public void reactorVsExternal() throws Exception { File featureProject = resourceFile("reactor-vs-external/feature01"); addReactorProject(featureProject, TYPE_ECLIPSE_FEATURE, "org.sonatype.tycho.p2.impl.resolver.test.feature01"); - List results = impl.resolveProject(context.buildTargetPlatform(), featureProject); + List results = impl.resolveDependencies(context.buildTargetPlatform(), featureProject); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -322,7 +322,7 @@ public void resolutionRestrictedEE() throws Exception { String artifactId = "bundle.bree"; addReactorProject(bundle, TYPE_ECLIPSE_PLUGIN, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -345,7 +345,7 @@ public void resolutionEE() throws Exception { String artifactId = "bundle.bree"; addReactorProject(bundle, TYPE_ECLIPSE_PLUGIN, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(1, results.size()); P2ResolutionResult result = results.get(0); @@ -368,7 +368,7 @@ public void resolutionCustomEE() throws Exception { File bundle = resourceFile("resolver/bundleRequiringVersionedJDKPackage"); addReactorProject(bundle, TYPE_ECLIPSE_PLUGIN, "bundleRequiringVersionedJDKPackage"); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); assertThat(results.size(), is(1)); P2ResolutionResult result = results.get(0); // huh? @@ -389,7 +389,7 @@ public void featureMultienvP2Inf() throws Exception { String artifactId = "feature.multienv.p2-inf"; addReactorProject(bundle, TYPE_ECLIPSE_FEATURE, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(2, results.size()); @@ -417,7 +417,7 @@ public void productMultienvP2Inf() throws Exception { String artifactId = "product.multienv.p2-inf"; addReactorProject(bundle, TYPE_ECLIPSE_REPOSITORY, artifactId); - List results = impl.resolveProject(context.buildTargetPlatform(), bundle); + List results = impl.resolveDependencies(context.buildTargetPlatform(), bundle); Assert.assertEquals(2, results.size()); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTestBase.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTestBase.java index b3a9c61d95..45888be576 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTestBase.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverTestBase.java @@ -111,7 +111,7 @@ protected final TargetPlatformBuilderImpl createTargetPlatformBuilderWithEE(Stri protected final TargetPlatformBuilderImpl createTargetPlatformBuilderWithEE( ExecutionEnvironmentResolutionHandler eeResolutionHandler) throws Exception { - return new TestTargetPlatformBuilderFactory().createTargetPlatformBuider(eeResolutionHandler); + return new TestTargetPlatformBuilderFactory().createTargetPlatformBuilder(eeResolutionHandler); } protected final TargetPlatformBuilderImpl createTargetPlatformBuilderWithCustomEE(String customEE) throws Exception { @@ -119,7 +119,7 @@ protected final TargetPlatformBuilderImpl createTargetPlatformBuilderWithCustomE .createTargetPlatformBuilder(new CustomEEResolutionHints(customEE)); } - private static class TestTargetPlatformBuilderFactory { + static class TestTargetPlatformBuilderFactory { private MavenContext mavenContext; private TargetDefinitionResolverService targetDefinitionResolverService; @@ -140,6 +140,14 @@ private static class TestTargetPlatformBuilderFactory { localArtifactRepo = new LocalArtifactRepository(localRepoIndices, localRepositoryReader); } + public LocalMetadataRepository getLocalMetadataRepository() { + return localMetadataRepo; + } + + public TargetPlatformBuilderImpl createTargetPlatformBuilder() throws Exception { + return createTargetPlatformBuilder(new NoopEEResolverHints()); + } + public TargetPlatformBuilderImpl createTargetPlatformBuilder( ExecutionEnvironmentResolutionHints executionEnvironment) throws Exception { ExecutionEnvironmentResolutionHandler eeHandler = new ExecutionEnvironmentResolutionHandler( @@ -151,10 +159,10 @@ public void readFullSpecification(Collection targetPlatformCon } }; - return createTargetPlatformBuider(eeHandler); + return createTargetPlatformBuilder(eeHandler); } - public TargetPlatformBuilderImpl createTargetPlatformBuider(ExecutionEnvironmentResolutionHandler eeHandler) + public TargetPlatformBuilderImpl createTargetPlatformBuilder(ExecutionEnvironmentResolutionHandler eeHandler) throws ProvisionException { return new TargetPlatformBuilderImpl(new RemoteAgent(mavenContext), mavenContext, targetDefinitionResolverService, eeHandler, localArtifactRepo, localMetadataRepo); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/TargetPlatformBuilderTest.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/TargetPlatformBuilderTest.java index 2bccf9b2a4..a08e3d1d89 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/TargetPlatformBuilderTest.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/src/test/java/org/eclipse/tycho/p2/impl/resolver/TargetPlatformBuilderTest.java @@ -10,12 +10,16 @@ *******************************************************************************/ package org.eclipse.tycho.p2.impl.resolver; +import static org.junit.Assert.assertEquals; + import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.tycho.ArtifactKey; @@ -30,7 +34,11 @@ import org.eclipse.tycho.p2.impl.test.ArtifactMock; import org.eclipse.tycho.p2.metadata.DependencyMetadataGenerator; import org.eclipse.tycho.p2.metadata.IDependencyMetadata; +import org.eclipse.tycho.p2.repository.GAV; +import org.eclipse.tycho.p2.target.TargetPlatformBuilderImpl; +import org.eclipse.tycho.repository.local.LocalMetadataRepository; import org.eclipse.tycho.test.util.BuildPropertiesParserForTesting; +import org.eclipse.tycho.test.util.InstallableUnitUtil; import org.junit.Assert; import org.junit.Test; @@ -193,6 +201,23 @@ public void testReactorProjectFiltering() throws Exception { assertContainsIU(units, "org.eclipse.tycho.p2.impl.test.feature-p2-inf.feature.group"); } + @Test + public void testIncludeLocalMavenRepo() throws Exception { + TestTargetPlatformBuilderFactory factory = new TestTargetPlatformBuilderFactory(); + LocalMetadataRepository localMetadataRepo = factory.getLocalMetadataRepository(); + // add one IU to local repo + localMetadataRepo.addInstallableUnit(InstallableUnitUtil.createIU("locallyInstalledIU", "1.0.0"), new GAV( + "test", "foo", "1.0.0")); + TargetPlatformBuilderImpl tpBuilder = factory.createTargetPlatformBuilder(); + Collection iusIncludingLocalRepo = tpBuilder.buildTargetPlatform().getInstallableUnits(); + tpBuilder.setIncludeLocalMavenRepo(false); + Collection iusWithoutLocalRepo = tpBuilder.buildTargetPlatform().getInstallableUnits(); + Set retainedIUs = new HashSet(iusIncludingLocalRepo); + retainedIUs.removeAll(iusWithoutLocalRepo); + assertEquals(1, retainedIUs.size()); + assertEquals("locallyInstalledIU", retainedIUs.iterator().next().getId()); + } + private void assertContainsIU(Collection units, String id) { Assert.assertNotNull("Missing installable unit with id " + id, getIU(units, id)); } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/artifacts/p2/P2TargetPlatform.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/artifacts/p2/P2TargetPlatform.java index 9df62ddc2f..583bcad781 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/artifacts/p2/P2TargetPlatform.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/artifacts/p2/P2TargetPlatform.java @@ -32,11 +32,7 @@ public interface P2TargetPlatform extends TargetPlatform { */ ExecutionEnvironmentResolutionHints getEEResolutionHints(); - /** - * Notify the target platform implementation about which IUs are actually used. This for example - * allows debug output. - */ - void reportUsedIUs(Collection usedUnits); + void reportUsedLocalIUs(Collection usedUnits); void downloadArtifacts(Collection usedUnits); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverFactoryImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverFactoryImpl.java index 5dde603be0..83985e5232 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverFactoryImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverFactoryImpl.java @@ -62,13 +62,6 @@ private static synchronized LocalMetadataRepository getLocalMetadataRepository(M localMetadataRepository = new LocalMetadataRepository(localMavenRepoRoot.toURI(), localRepoIndices.getMetadataIndex(), contentLocator); - // TODO this logic shouldn't be here - String localArtifactHandling = context.getSessionProperties().getProperty("tycho.localArtifacts"); - if ("ignore".equalsIgnoreCase(localArtifactHandling)) { - context.getLogger().debug( - "tycho.localArtifacts=" + localArtifactHandling + " -> ignoring locally built artifacts"); - localMetadataRepository.setIncludeInTargetPlatform(false); - } } return localMetadataRepository; } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java index c64a6c8948..4f9ab89e9a 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/P2ResolverImpl.java @@ -68,17 +68,17 @@ public P2ResolverImpl(MavenLogger logger) { this.environments = Collections.singletonList(TargetEnvironment.getRunningEnvironment()); } - public List resolveProject(TargetPlatform targetPlatform, File projectLocation) { + public List resolveDependencies(TargetPlatform targetPlatform, File projectLocation) { this.context = (P2TargetPlatform) targetPlatform; ArrayList results = new ArrayList(); usedTargetPlatformUnits = new LinkedHashSet(); for (TargetEnvironment environment : environments) { - results.add(resolveProject(projectLocation, new ProjectorResolutionStrategy(logger), environment)); + results.add(resolveDependencies(projectLocation, new ProjectorResolutionStrategy(logger), environment)); } - context.reportUsedIUs(usedTargetPlatformUnits); + context.reportUsedLocalIUs(usedTargetPlatformUnits); usedTargetPlatformUnits = null; return results; @@ -86,7 +86,7 @@ public List resolveProject(TargetPlatform targetPlatform, Fi public P2ResolutionResult collectProjectDependencies(TargetPlatform context, File projectLocation) { this.context = (P2TargetPlatform) context; - return resolveProject(projectLocation, new DependencyCollector(logger), new TargetEnvironment(null, null, null)); + return resolveDependencies(projectLocation, new DependencyCollector(logger), new TargetEnvironment(null, null, null)); } public P2ResolutionResult resolveMetadata(TargetPlatformBuilder context) { @@ -104,16 +104,18 @@ public P2ResolutionResult resolveMetadata(TargetPlatformBuilder context) { return result; } - protected P2ResolutionResult resolveProject(File projectLocation, AbstractResolutionStrategy strategy, + protected P2ResolutionResult resolveDependencies(File projectLocation, AbstractResolutionStrategy strategy, TargetEnvironment environment) { - strategy.setRootInstallableUnits(context.getReactorProjectIUs(projectLocation, true)); - strategy.setAdditionalRequirements(additionalRequirements); Collection availableUnits = context.getInstallableUnits(); - Collection projectSecondaryIUs = context.getReactorProjectIUs(projectLocation, false); - if (!projectSecondaryIUs.isEmpty()) { - availableUnits = new LinkedHashSet(availableUnits); - availableUnits.addAll(projectSecondaryIUs); + strategy.setRootInstallableUnits(getRootIUs(projectLocation)); + if (projectLocation != null) { + Collection projectSecondaryIUs = context.getReactorProjectIUs(projectLocation, false); + if (!projectSecondaryIUs.isEmpty()) { + availableUnits = new LinkedHashSet(availableUnits); + availableUnits.addAll(projectSecondaryIUs); + } } + strategy.setAdditionalRequirements(additionalRequirements); strategy.setAvailableInstallableUnits(availableUnits); strategy.setEEResolutionHints(context.getEEResolutionHints()); @@ -127,6 +129,14 @@ protected P2ResolutionResult resolveProject(File projectLocation, AbstractResolu return toResolutionResult(newState); } + private Collection getRootIUs(File projectLocation) { + if (projectLocation == null) { + return Collections. emptyList(); + } else { + return context.getReactorProjectIUs(projectLocation, true); + } + } + private P2ResolutionResult toResolutionResult(Collection newState) { DefaultP2ResolutionResult result = new DefaultP2ResolutionResult(); for (IInstallableUnit iu : newState) { diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java index 60efa05bba..3b8b9ab535 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformBuilderImpl.java @@ -102,6 +102,7 @@ public class TargetPlatformBuilderImpl implements TargetPlatformBuilder { /** maven local repository as P2 IMetadataRepository */ private final LocalMetadataRepository localMetadataRepository; + private boolean includeLocalMavenRepo; public TargetPlatformBuilderImpl(IProvisioningAgent remoteAgent, MavenContext mavenContext, TargetDefinitionResolverService targetDefinitionResolverService, @@ -111,6 +112,7 @@ public TargetPlatformBuilderImpl(IProvisioningAgent remoteAgent, MavenContext ma this.targetDefinitionResolverService = targetDefinitionResolverService; this.logger = mavenContext.getLogger(); this.monitor = new LoggingProgressMonitor(logger); + this.includeLocalMavenRepo = shouldIncludeLocalMavenRepo(mavenContext); this.remoteMetadataRepositoryManager = (IMetadataRepositoryManager) remoteAgent .getService(IMetadataRepositoryManager.SERVICE_NAME); @@ -138,7 +140,9 @@ public TargetPlatformBuilderImpl(IProvisioningAgent remoteAgent, MavenContext ma this.localArtifactRepository = localArtifactRepo; this.localMetadataRepository = localMetadataRepo; - metadataRepositories.add(this.localMetadataRepository); + if (includeLocalMavenRepo) { + metadataRepositories.add(this.localMetadataRepository); + } } // --------------------------------------------------------------------- @@ -213,9 +217,10 @@ private IArtifactRepository getSupplementaryArtifactRepository() { // ------------------------------------------------------------ /** - * All known P2 metadata repositories, including maven local repository + * All known P2 metadata repositories, including maven local repository unless + * {@link #includeLocalMavenRepo} is false. */ - private final List metadataRepositories = new ArrayList(); + private final Set metadataRepositories = new LinkedHashSet(); /** * All known P2 artifact repositories, NOT including maven local repository. @@ -346,6 +351,7 @@ public P2TargetPlatform buildTargetPlatform() { localArtifactRepository, // remoteAgent, // includePackedArtifacts, // + includeLocalMavenRepo,// logger); eeResolutionHandler.readFullSpecification(targetPlatform.getInstallableUnits()); @@ -373,17 +379,11 @@ private LinkedHashSet gatherExternalInstallableUnits(IProgress } sub.done(); - if (logger.isDebugEnabled()) { + if (includeLocalMavenRepo && logger.isDebugEnabled()) { IQueryResult locallyInstalledIUs = localMetadataRepository.query(QueryUtil.ALL_UNITS, null); logger.debug("Added " + countElements(locallyInstalledIUs.iterator()) + " locally built units to the target platform"); - - // TODO it is questionable if the following is useful at all; instead, the full metadata should be written to a file for target platform debugging -// logger.debug("The following locally built units are added to the target platform:"); -// for (IInstallableUnit unit : locallyInstalledIUs.toSet()) { -// logger.debug(" " + unit.getId() + "/" + unit.getVersion()); -// } } return result; @@ -497,4 +497,25 @@ public void setIncludePackedArtifacts(boolean include) { public void setFailOnDuplicateIUs(boolean failOnDuplicateIUs) { this.failOnDuplicateIUs = failOnDuplicateIUs; } + + public void setIncludeLocalMavenRepo(boolean includeLocalMavenRepo) { + this.includeLocalMavenRepo = includeLocalMavenRepo; + if (includeLocalMavenRepo) { + metadataRepositories.add(localMetadataRepository); + } else { + metadataRepositories.remove(localMetadataRepository); + } + } + + static boolean shouldIncludeLocalMavenRepo(MavenContext context) { + boolean ignoreLocal = "ignore".equalsIgnoreCase(context.getSessionProperties().getProperty( + "tycho.localArtifacts")); + if (ignoreLocal) { + context.getLogger().debug( + "tycho.localArtifacts=" + context.getSessionProperties().getProperty("tycho.localArtifacts") + + " -> ignoring locally built artifacts"); + } + return !ignoreLocal; + } + } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformImpl.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformImpl.java index 172deea56f..26219a48e2 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformImpl.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/target/TargetPlatformImpl.java @@ -76,21 +76,23 @@ public class TargetPlatformImpl implements P2TargetPlatform { private final boolean includePackedArtifacts; + private boolean includeLocalRepo; + public TargetPlatformImpl(Collection reactorProjects, Collection ius, Map mavenArtifactIUs, ExecutionEnvironmentResolutionHints executionEnvironment, TargetPlatformFilterEvaluator filter, LocalMetadataRepository localMetadataRepository, List allRemoteArtifactRepositories, LocalArtifactRepository localMavenRepository, IProvisioningAgent agent, boolean includePackedArtifacts, - MavenLogger logger) { + boolean includeLocalRepo, MavenLogger logger) { this.reactorProjects = reactorProjects; this.externalIUs = ius; this.executionEnvironment = executionEnvironment; this.mavenArtifactIUs = mavenArtifactIUs; this.filter = filter; this.localMetadataRepository = localMetadataRepository; + this.includeLocalRepo = includeLocalRepo; this.remoteArtifactRepositories = allRemoteArtifactRepositories; this.localMavenRepository = localMavenRepository; - this.agent = agent; this.includePackedArtifacts = includePackedArtifacts; this.logger = logger; @@ -172,7 +174,10 @@ public File getLocalArtifactFile(IArtifactKey key) { return localMavenRepository.getArtifactFile(key); } - public void reportUsedIUs(Collection usedUnits) { + public void reportUsedLocalIUs(Collection usedUnits) { + if (!includeLocalRepo) { + return; + } final Set localIUs = localMetadataRepository.query(QueryUtil.ALL_UNITS, null).toSet(); localIUs.retainAll(usedUnits); @@ -184,19 +189,13 @@ public void reportUsedIUs(Collection usedUnits) { } if (!localIUs.isEmpty()) { - logLocalIUMessage("The following locally built units have been used to resolve project dependencies:"); + logger.warn("The following locally built units have been used to resolve project dependencies:"); for (IInstallableUnit localIu : localIUs) { - logLocalIUMessage(" " + localIu.getId() + "/" + localIu.getVersion()); + logger.warn(" " + localIu.getId() + "/" + localIu.getVersion()); } } } - private void logLocalIUMessage(String message) { - if (localMetadataRepository.getIncludeInTargetPlatform()) { - logger.warn(message); - } - } - // TODO this method should not be necessary; instead download should happen on access public void downloadArtifacts(Collection usedUnits) { P2ArtifactDownloadTool downloadTool = new P2ArtifactDownloadTool(agent, logger); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/resolver/facade/P2Resolver.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/resolver/facade/P2Resolver.java index e7960e14bc..af449a6d20 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/resolver/facade/P2Resolver.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/resolver/facade/P2Resolver.java @@ -35,10 +35,13 @@ public interface P2Resolver { /** * Returns list ordered of resolution result, one per requested TargetEnvironment. * + * @param reactorProjectLocation + * may be null * @TODO this should return Map */ - public List resolveProject(TargetPlatform context, File location); + public List resolveDependencies(TargetPlatform context, File reactorProjectLocation); + @Deprecated public P2ResolutionResult collectProjectDependencies(TargetPlatform context, File projectLocation); public P2ResolutionResult resolveMetadata(TargetPlatformBuilder context); diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformBuilder.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformBuilder.java index 4ce8190835..d318492f3c 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformBuilder.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.shared/src/main/java/org/eclipse/tycho/p2/target/facade/TargetPlatformBuilder.java @@ -45,6 +45,8 @@ public void addTargetDefinition(TargetDefinition definition, List results = resolver.resolveProject(resolutionContext, project.getBasedir()); + List results = resolver.resolveDependencies(resolutionContext, project.getBasedir()); MultiEnvironmentTargetPlatform multiPlatform = new MultiEnvironmentTargetPlatform( DefaultReactorProject.adapt(project));