From 1b9f9e6a5eb263c6a21f3be43286f0ec28f662b7 Mon Sep 17 00:00:00 2001 From: Veselin Markov Date: Sat, 11 Aug 2018 15:06:46 +0200 Subject: [PATCH] Fixed generated metadata in p2 repositories for source bundles the genereted provides-element now has the same type as repositores built by p2. See org.eclipse.equinox.p2.publisher.eclipse.BundlesAction vor details. Signed-off-by: Veselin Markov --- .../common/tests/InstallableUnitTest.java | 27 +++++++++++++++++++ .../aspect/common/p2/InstallableUnit.java | 10 +++++-- .../utils/osgi/bundle/BundleInformation.java | 12 +++++++++ .../osgi/bundle/BundleInformationParser.java | 1 + 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/bundles/org.eclipse.packagedrone.repo.aspect.common.tests/src/org/eclipse/packagedrone/repo/aspect/common/tests/InstallableUnitTest.java b/bundles/org.eclipse.packagedrone.repo.aspect.common.tests/src/org/eclipse/packagedrone/repo/aspect/common/tests/InstallableUnitTest.java index 1c4d2e11..36e5d556 100644 --- a/bundles/org.eclipse.packagedrone.repo.aspect.common.tests/src/org/eclipse/packagedrone/repo/aspect/common/tests/InstallableUnitTest.java +++ b/bundles/org.eclipse.packagedrone.repo.aspect.common.tests/src/org/eclipse/packagedrone/repo/aspect/common/tests/InstallableUnitTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.MatcherAssert.assertThat; import java.util.List; @@ -144,6 +145,32 @@ public void platformFilterConvertedToFilter () throws Exception assertThat ( iu.getFilter (), is ( platformFilter ) ); } + @Test + public void providesTypeBundle () throws Exception + { + final BundleInformation bi = new BundleInformation (); + bi.setSourceBunde ( false ); + final P2MetaDataInformation p2info = new P2MetaDataInformation (); + + final InstallableUnit iu = InstallableUnit.fromBundle ( bi, p2info ); + + assertThat ( iu, hasProvided ( "org.eclipse.equinox.p2.eclipse.type", "bundle", "1.0.0" ) ); + assertThat ( iu, not ( hasProvided ( "org.eclipse.equinox.p2.eclipse.type", "source", "1.0.0" ) ) ); + } + + @Test + public void providesTypeSource () throws Exception + { + final BundleInformation bi = new BundleInformation (); + bi.setSourceBunde ( true ); + final P2MetaDataInformation p2info = new P2MetaDataInformation (); + + final InstallableUnit iu = InstallableUnit.fromBundle ( bi, p2info ); + + assertThat ( iu, hasProvided ( "org.eclipse.equinox.p2.eclipse.type", "source", "1.0.0" ) ); + assertThat ( iu, not ( hasProvided ( "org.eclipse.equinox.p2.eclipse.type", "bundle", "1.0.0" ) ) ); + } + static private final Matcher hasProvided ( final String namespace, final String name, final String version ) { return new CustomTypeSafeMatcher ( "IU with 'provided'-element [namespace=" + namespace + ", name=" + name + ", version=" + version + " ]" ) { diff --git a/bundles/org.eclipse.packagedrone.repo.aspect.common/src/org/eclipse/packagedrone/repo/aspect/common/p2/InstallableUnit.java b/bundles/org.eclipse.packagedrone.repo.aspect.common/src/org/eclipse/packagedrone/repo/aspect/common/p2/InstallableUnit.java index 66b5d343..a3a7d4ab 100644 --- a/bundles/org.eclipse.packagedrone.repo.aspect.common/src/org/eclipse/packagedrone/repo/aspect/common/p2/InstallableUnit.java +++ b/bundles/org.eclipse.packagedrone.repo.aspect.common/src/org/eclipse/packagedrone/repo/aspect/common/p2/InstallableUnit.java @@ -532,8 +532,14 @@ public static InstallableUnit fromBundle ( final BundleInformation bundle, final addProvides ( result, "osgi.bundle", bundle.getId (), "" + bundle.getVersion () ); addProvides ( result, "org.eclipse.equinox.p2.iu", bundle.getId (), "" + bundle.getVersion () ); - addProvides ( result, "org.eclipse.equinox.p2.eclipse.type", "bundle", "1.0.0" ); - + if ( bundle.isSourceBundle () ) + { + addProvides ( result, "org.eclipse.equinox.p2.eclipse.type", "source", "1.0.0" ); + } + else + { + addProvides ( result, "org.eclipse.equinox.p2.eclipse.type", "bundle", "1.0.0" ); + } for ( final PackageExport pe : bundle.getPackageExports () ) { addProvides ( result, "java.package", pe.getName (), makeVersion ( pe.getVersion () ) ); diff --git a/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformation.java b/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformation.java index 9e6802db..925cacb3 100644 --- a/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformation.java +++ b/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformation.java @@ -440,6 +440,8 @@ public String getEffective () private String eclipsePlatformFilter; + private boolean sourceBundle; + public void setEclipseBundleShape ( final String eclipseBundleShape ) { this.eclipseBundleShape = eclipseBundleShape; @@ -656,4 +658,14 @@ public String toJson () { return ParserHelper.newGson ().toJson ( this ); } + + public void setSourceBunde ( final boolean source ) + { + this.sourceBundle = source; + } + + public boolean isSourceBundle () + { + return this.sourceBundle; + } } diff --git a/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformationParser.java b/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformationParser.java index 642f14b4..edcc2a06 100644 --- a/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformationParser.java +++ b/bundles/org.eclipse.packagedrone.repo.utils.osgi/src/org/eclipse/packagedrone/repo/utils/osgi/bundle/BundleInformationParser.java @@ -114,6 +114,7 @@ else if ( this.file != null ) result.setRequiredExecutionEnvironments ( Headers.parseStringList ( ma.getValue ( Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT ) ) ); result.setEclipsePlatformFilter ( ma.getValue ( "Eclipse-PlatformFilter" ) ); + result.setSourceBunde ( ma.getValue ( "Eclipse-SourceBundle" ) != null ); processImportPackage ( result, ma ); processExportPackage ( result, ma );