From 198ef97930794f59230035f350f286255ea63c61 Mon Sep 17 00:00:00 2001 From: Igor Fedorenko Date: Wed, 30 May 2012 10:01:36 -0400 Subject: [PATCH] 380934 do not 'fixSWT' for swt fragment projects Change-Id: I2990ff68acfe14e104480ba85ce30c2138d74e45 Signed-off-by: Igor Fedorenko --- .../swt/org.eclipse.swt/META-INF/MANIFEST.MF | 4 ++ .../resolver/swt/swtFragment/META-INF/MANIFEST.MF | 6 ++ .../tycho/p2/impl/resolver/P2ResolverTest.java | 54 ++++++++++++++++++++ .../impl/resolver/ProjectorResolutionStrategy.java | 12 ++++ 4 files changed, 76 insertions(+), 0 deletions(-) create mode 100644 tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/org.eclipse.swt/META-INF/MANIFEST.MF create mode 100644 tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/swtFragment/META-INF/MANIFEST.MF diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/org.eclipse.swt/META-INF/MANIFEST.MF b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/org.eclipse.swt/META-INF/MANIFEST.MF new file mode 100644 index 0000000..b2eda0d --- /dev/null +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/org.eclipse.swt/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: org.eclipse.swt +Bundle-Version: 3.0.0.qualifier diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/swtFragment/META-INF/MANIFEST.MF b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/swtFragment/META-INF/MANIFEST.MF new file mode 100644 index 0000000..380c312 --- /dev/null +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl.test/resources/resolver/swt/swtFragment/META-INF/MANIFEST.MF @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: org.eclipse.tycho.p2.impl.resolver.test.swtFragment +Bundle-SymbolicName: org.eclipse.tycho.p2.impl.resolver.swtFragment +Bundle-Version: 1.0.0.qualifier +Fragment-Host: org.eclipse.swt; bundle-version="[3.0.0,4.0.0)" 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 7d5ea2d..cc7baf4 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 @@ -222,6 +222,60 @@ public class P2ResolverTest extends P2ResolverTestBase { assertContainsUnit("org.eclipse.swt.gtk.linux.x86_64", result.getNonReactorUnits()); } + @Test + public void swt() throws Exception { + File swt = resourceFile("resolver/swt/org.eclipse.swt"); + addReactorProject(swt, TYPE_ECLIPSE_PLUGIN, "org.eclipse.swt"); + 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); + + Assert.assertEquals(1, results.size()); + P2ResolutionResult result = results.get(0); + + Assert.assertEquals(1, result.getArtifacts().size()); + assertContainLocation(result, swt); + } + + @Test + public void swtFragment() throws Exception { + File swt = resourceFile("resolver/swt/org.eclipse.swt"); + addReactorProject(swt, TYPE_ECLIPSE_PLUGIN, "org.eclipse.swt"); + 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); + + Assert.assertEquals(1, results.size()); + P2ResolutionResult result = results.get(0); + + Assert.assertEquals(2, result.getArtifacts().size()); + Assert.assertEquals(0, result.getNonReactorUnits().size()); + + assertContainLocation(result, swtFragment); + assertContainLocation(result, swt); + } + + @Test + public void swtFragmentWithRemoteSWT() throws Exception { + context.addP2Repository(resourceFile("repositories/e361").toURI()); + + 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); + + Assert.assertEquals(1, results.size()); + P2ResolutionResult result = results.get(0); + + Assert.assertEquals(2, result.getArtifacts().size()); + Assert.assertEquals(1, result.getNonReactorUnits().size()); + + assertContainLocation(result, swtFragment); + assertContainsUnit("org.eclipse.swt", result.getNonReactorUnits()); + } + private static void assertContainsUnit(String unitID, Set units) { Assert.assertFalse("Unit " + unitID + " not found", getInstallableUnits(unitID, units).isEmpty()); } diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/ProjectorResolutionStrategy.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/ProjectorResolutionStrategy.java index 3d0f3db..c5bf797 100644 --- a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/ProjectorResolutionStrategy.java +++ b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/impl/resolver/ProjectorResolutionStrategy.java @@ -110,6 +110,18 @@ public class ProjectorResolutionStrategy extends AbstractSlicerResolutionStrateg return; } + // 380934 one of rootIUs can be SWT or an SWT fragment + for (IInstallableUnit iu : rootIUs) { + if ("org.eclipse.swt".equals(iu.getId())) { + return; + } + for (IProvidedCapability provided : iu.getProvidedCapabilities()) { + if ("osgi.fragment".equals(provided.getNamespace()) && "org.eclipse.swt".equals(provided.getName())) { + return; + } + } + } + IInstallableUnit swtFragment = null; all_ius: for (Iterator iter = availableIUs.query(QueryUtil.ALL_UNITS, monitor).iterator(); iter -- 1.7.7.6