[tycho] Use fedoraproject-p2 to do OSGi bundle discovery.

Roland Grunberg rgrunber at fedoraproject.org
Thu Sep 4 16:48:55 UTC 2014


commit b31d03ca43ee67aa09a072217a1d67ebf7eff39d
Author: Roland Grunberg <rgrunber at redhat.com>
Date:   Wed Sep 3 16:38:59 2014 -0400

    Use fedoraproject-p2 to do OSGi bundle discovery.

 tycho-use-custom-resolver.patch |   96 ++++++++++++++++++++-------------------
 tycho.spec                      |   20 +++++++-
 2 files changed, 67 insertions(+), 49 deletions(-)
---
diff --git a/tycho-use-custom-resolver.patch b/tycho-use-custom-resolver.patch
index 4e88e58..d609bf1 100644
--- a/tycho-use-custom-resolver.patch
+++ b/tycho-use-custom-resolver.patch
@@ -1,4 +1,4 @@
-From c6cfa4c4e6ce97cc634694987d9f87a032808e15 Mon Sep 17 00:00:00 2001
+From d194350892237fe41982ab85e2a6e49df778c181 Mon Sep 17 00:00:00 2001
 From: Roland Grunberg <rgrunber at redhat.com>
 Date: Tue, 12 Jun 2012 10:38:51 -0400
 Subject: [PATCH] Implement a custom resolver for Tycho in local mode.
@@ -7,9 +7,7 @@ When running in local mode, dependencies should be resolved by looking
 on the local system. Remote repositories should be ignored unless
 offline mode is disabled.
 
-Automatically create a local p2 repository of all bundles on the system
-so that they may be used for local dependency resolution. This is done
-using a modified version of Eclipse's copy-platform script.
+Use fedoraproject-p2 to resolve bundles from their system location.
 
 Since Fedora 17, we need an Execution Environment of at least JavaSE-1.6
 for Eclipse bundles. Eclipse Juno platform bundles depend on
@@ -29,18 +27,19 @@ Change-Id: Ia1ece07ece2412bc4a88901631f3f651ad2b634b
 ---
  .../p2/remote/RemoteRepositoryCacheManager.java    | 14 +++++++
  .../tycho/p2/target/TargetDefinitionResolver.java  | 12 ++++--
- .../p2/target/TargetPlatformBundlePublisher.java   | 15 ++-----
- .../tycho/p2/target/TargetPlatformFactoryImpl.java | 45 ++++++++++++++++++--
- .../tycho/p2/repository/LocalRepositoryReader.java | 44 +++++++++++++++++++-
+ .../p2/target/TargetPlatformBundlePublisher.java   | 15 ++------
+ .../tycho/p2/target/TargetPlatformFactoryImpl.java | 45 ++++++++++++++++++++--
+ .../tycho/p2/repository/LocalRepositoryReader.java | 44 ++++++++++++++++++++-
  .../facade/TargetPlatformConfigurationStub.java    |  6 ++-
  .../tycho-bundles-external.product                 |  1 +
- .../eclipse/tycho/core/locking/FileLockerImpl.java | 26 +++++++++---
- .../core/maven/TychoMavenLifecycleParticipant.java | 13 ++++++
+ .../eclipse/tycho/core/locking/FileLockerImpl.java | 26 ++++++++++---
+ .../core/maven/TychoMavenLifecycleParticipant.java | 13 +++++++
  .../tycho/core/osgitools/AbstractTychoProject.java | 23 +++++++++++
- .../tycho/core/osgitools/OsgiBundleProject.java    | 29 ++++++++++++-
+ .../tycho/core/osgitools/OsgiBundleProject.java    | 29 +++++++++++++-
  .../DefaultTargetPlatformConfigurationReader.java  |  6 ++-
- .../tycho/p2/resolver/P2DependencyResolver.java    | 48 ++++++++++++++++++++++
- 13 files changed, 253 insertions(+), 29 deletions(-)
+ tycho-p2/tycho-p2-facade/pom.xml                   |  5 +++
+ .../tycho/p2/resolver/P2DependencyResolver.java    | 30 +++++++++++++++
+ 14 files changed, 240 insertions(+), 29 deletions(-)
 
 diff --git a/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java b/tycho-bundles/org.eclipse.tycho.p2.resolver.impl/src/main/java/org/eclipse/tycho/p2/remote/RemoteRepositoryCacheManager.java
 index 707b1c5..c8c4152 100644
@@ -511,8 +510,24 @@ index 4a1f157..65cbf47 100644
  
                  setTargetPlatformResolver(result, configuration);
  
+diff --git a/tycho-p2/tycho-p2-facade/pom.xml b/tycho-p2/tycho-p2-facade/pom.xml
+index dc1941f..0e84b5b 100644
+--- a/tycho-p2/tycho-p2-facade/pom.xml
++++ b/tycho-p2/tycho-p2-facade/pom.xml
+@@ -57,6 +57,11 @@
+ 			<artifactId>junit</artifactId>
+ 			<scope>test</scope>
+ 		</dependency>
++		<dependency>
++			<groupId>org.fedoraproject.p2</groupId>
++			<artifactId>org.fedoraproject.p2</artifactId>
++			<version>0.0.1-SNAPSHOT</version>
++		</dependency>
+ 	</dependencies>
+ 
+ 	<build>
 diff --git a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
-index 255df24..554702d 100644
+index 255df24..2e4e113 100644
 --- a/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
 +++ b/tycho-p2/tycho-p2-facade/src/main/java/org/eclipse/tycho/p2/resolver/P2DependencyResolver.java
 @@ -15,6 +15,7 @@ import java.net.MalformedURLException;
@@ -523,49 +538,38 @@ index 255df24..554702d 100644
  import java.util.ArrayList;
  import java.util.Collection;
  import java.util.HashMap;
-@@ -201,6 +202,53 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen
+@@ -85,6 +86,7 @@ import org.eclipse.tycho.p2.resolver.facade.P2ResolverFactory;
+ import org.eclipse.tycho.p2.target.facade.PomDependencyCollector;
+ import org.eclipse.tycho.p2.target.facade.TargetPlatformConfigurationStub;
+ import org.eclipse.tycho.repository.registry.facade.ReactorRepositoryManagerFacade;
++import org.fedoraproject.p2.EclipseSystemLayout;
+ 
+ @Component(role = DependencyResolver.class, hint = P2DependencyResolver.ROLE_HINT, instantiationStrategy = "per-lookup")
+ public class P2DependencyResolver extends AbstractLogEnabled implements DependencyResolver, Initializable {
+@@ -201,6 +203,34 @@ public class P2DependencyResolver extends AbstractLogEnabled implements Dependen
              pomDependencies.setProjectLocation(project.getBasedir());
          }
  
 +        // Add Fedora Local P2 Repository when running in local mode
 +        if (System.getProperty("TYCHO_MVN_LOCAL") != null || System.getProperty("TYCHO_MVN_RPMBUILD") != null) {
 +
-+            // Find all SCL roots
-+            String jconfdirs = System.getProperty("JAVACONFDIRS");
-+            List<String> roots = new ArrayList<String>();
-+            roots.add("/");
-+            if (jconfdirs != null && !jconfdirs.isEmpty()) {
-+                String[] jconfRoots = jconfdirs.split(":");
-+                for (String jconfRoot : jconfRoots) {
-+                    roots.add(jconfRoot.replace("etc/java", ""));
-+                }
-+            }
-+
-+            String is64 = System.getProperty("os.arch").contains("64") ? "64" : "";
-+            // Locations for all OSGi bundles
-+            final String[] locations = new String[] { "usr/lib" + is64 + "/eclipse/plugins", "usr/lib" + is64 + "/eclipse/features",
-+                    "usr/share/eclipse/dropins/", "usr/lib" + is64 + "/eclipse/dropins/", "usr/share/java/",
-+                    "usr/lib/java/" };
++            Set<String> allLocations = new HashSet<String>();
++            final Set<String> roots = EclipseSystemLayout.getSCLRoots();
 +
-+            List<String> uris = new ArrayList<String>();
++            Set<String> platformDirs = new HashSet<String>();
++            Set<String> internalDirs = new HashSet<String>();
++            Set<String> externalDirs = new HashSet<String>();
 +            for (String root : roots) {
-+                for (String loc : locations) {
-+                    if (Paths.get(root, loc).toFile().exists()) {
-+                        uris.add("fedora:" + root + loc);
-+                    }
-+                }
-+            }
-+            String value = System.getProperty("fedora.p2.repos");
-+            if (value != null) {
-+                String[] paths = value.split(",");
-+                for (String path : paths) {
-+                    if (Paths.get(path).toFile().exists()) {
-+                        uris.add("fedora:" + path);
-+                    }
-+                }
++                EclipseSystemLayout.initLocations(Paths.get(root), platformDirs, internalDirs, externalDirs, false);
 +            }
 +
-+            for (String uri : uris) {
++            allLocations.addAll(platformDirs);
++            allLocations.addAll(internalDirs);
++            allLocations.addAll(externalDirs);
++            allLocations.addAll(EclipseSystemLayout.getUserDefinedBundleLocations());
++
++            for (String loc : allLocations) {
++                String uri = "fedora:" + loc;
 +                try {
 +                    tpConfiguration.addP2Repository(new MavenRepositoryLocation(uri, new URI(uri)));
 +                } catch (URISyntaxException e) {
diff --git a/tycho.spec b/tycho.spec
index 8d985f4..277dd39 100644
--- a/tycho.spec
+++ b/tycho.spec
@@ -23,7 +23,7 @@
 
 Name:           tycho
 Version:        0.21.0
-Release:        5%{?dist}
+Release:        6%{?dist}
 Summary:        Plugins and extensions for building Eclipse plugins and OSGI bundles with Maven
 
 Group:          Development/Libraries
@@ -168,6 +168,8 @@ This package contains the API documentation for %{name}.
 # Prepare fedoraproject-p2
 tar -xf %{SOURCE5}
 
+%pom_disable_module org.fedoraproject.p2.tests fedoraproject-p2
+
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
@@ -234,7 +236,10 @@ mkdir boot
 
 # Copy Tycho POMs from system repo and set their versions to %%{version}-SNAPSHOT.
 for pom in $(grep 'pom</ns1:path>' $medadataFile | sed 's|.*>\(.*\)<.*|\1|'); do
-    sed s/$sysVer/%{version}-SNAPSHOT/g <$pom >boot/$(basename $pom)
+    sed '
+    s/$sysVer/%{version}-SNAPSHOT/g
+    s/%{fp_p2_version}%{fp_p2_snap}/%{fp_p2_version}/
+' <$pom >boot/$(basename $pom)
 done
 
 # Update Maven lifecycle mappings for Tycho packaging types provided by tycho-maven-plugin.
@@ -247,6 +252,7 @@ jar uf boot/tycho-maven-plugin.jar META-INF/plexus/components.xml
 sed '
   s|>/[^<]*/\([^/]*\.pom\)</ns1:path>|>'$PWD'/boot/\1</ns1:path>|
   s|>'$sysVer'</ns1:version>|>%{version}-SNAPSHOT</ns1:version><ns1:compatVersions><ns1:version>%{version}-SNAPSHOT</ns1:version></ns1:compatVersions>|
+  s|>'%{fp_p2_version}%{fp_p2_snap}'</ns1:version>|>%{fp_p2_version}</ns1:version><ns1:compatVersions><ns1:version>%{fp_p2_version}</ns1:version></ns1:compatVersions>|
   s|%{_javadir}/tycho/tycho-maven-plugin.jar|'$PWD'/boot/tycho-maven-plugin.jar|
 ' $medadataFile >boot/tycho-metadata.xml
 %mvn_config resolverSettings/metadataRepositories/repository $PWD/boot/tycho-metadata.xml
@@ -260,7 +266,7 @@ sed '
 %build
 xmvn -o -Dtycho-version=%{version}-SNAPSHOT -Dmaven.test.skip=true \
 -Dmaven.repo.local=$(pwd)/.m2 -Dfedora.p2.repos=$(pwd)/bootstrap \
--f fedoraproject-p2/org.fedoraproject.p2/pom.xml \
+-f fedoraproject-p2/pom.xml \
 clean install org.apache.maven.plugins:maven-javadoc-plugin:aggregate
 
 xmvn -o -DtychoBootstrapVersion=%{version}-SNAPSHOT -Dmaven.test.skip=true \
@@ -272,6 +278,11 @@ clean install org.apache.maven.plugins:maven-javadoc-plugin:aggregate
 mkdir -p $RPM_BUILD_ROOT%{_javadir}/%{name}
 install -d -m 755 $RPM_BUILD_ROOT%{_mavenpomdir}
 
+# fedoraproject-p2 parent
+mod=fedoraproject-p2
+install -pm 644 $mod/pom.xml $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-$mod.pom
+%add_maven_depmap JPP.%{name}-$mod.pom
+
 # org.fedoraproject.p2
 mod=fedoraproject-p2/org.fedoraproject.p2
 aid=`basename $mod`
@@ -368,6 +379,9 @@ install -m 644 $osgiStateJarPath $RPM_BUILD_ROOT%{_javadir}/%{name}/osgi.compati
 %{_javadocdir}/%{name}
 
 %changelog
+* Thu Sep 04 2014 Roland Grunberg <rgrunber at redhat.com> - 0.21.0-6
+- Use fedoraproject-p2 to do OSGi bundle discovery.
+
 * Wed Sep 03 2014 Mat Booth <mat.booth at redhat.com> - 0.21.0-5
 - Include eclipse features dir in custom resolver
 


More information about the scm-commits mailing list