commit 072e513b212e84001a1daa53af3c803c2b8ce7b6
Author: Michal Srb <msrb(a)redhat.com>
Date: Fri Jul 4 14:07:22 2014 +0200
Initial support for OSGi provides/requires in metadata
depgenerators/maven.prov | 5 ++++
depgenerators/maven.req | 10 +++++++++
depgenerators/osgi.prov | 2 +
depgenerators/osgi.req | 2 +
python/javapackages/common/osgi.py | 32 ++++++++++++++++++++++++++++++
python/javapackages/metadata/metadata.py | 30 +++++++++++++++++++++++++++-
6 files changed, 80 insertions(+), 1 deletions(-)
---
diff --git a/depgenerators/maven.prov b/depgenerators/maven.prov
index f3afa9e..0f0cda5 100755
--- a/depgenerators/maven.prov
+++ b/depgenerators/maven.prov
@@ -49,6 +49,11 @@ class TagBuilder:
for artifact in mdata.get_provided_artifacts():
print(artifact.get_rpm_str(namespace=artifact.namespace,
pkgver=artifact.version))
+ # print OSGi provides, if they are present in metadata
+ osgi_provides = mdata.get_osgi_provides()
+ for p in osgi_provides:
+ print("osgi({osgi_id}) = {version}".format(osgi_id=p,
+ version=osgi_provides[p]))
if __name__ == "__main__":
diff --git a/depgenerators/maven.req b/depgenerators/maven.req
index f334079..5da8933 100755
--- a/depgenerators/maven.req
+++ b/depgenerators/maven.req
@@ -328,6 +328,16 @@ class TagBuilder(object):
for req in requires:
print(req)
+ # print OSGi requires, if they are present in metadata
+ osgi_reqs = metadata.get_osgi_requires()
+ osgi_provs = metadata.get_osgi_provides()
+ for req in osgi_reqs:
+ if req in osgi_provs:
+ print("osgi({osgi_id}) = {version}".format(osgi_id=req,
version=osgi_provs[req]))
+ else:
+ print("osgi({osgi_id})".format(osgi_id=req))
+
+
def find_what_requires(self, artifact):
"""
Determine which artifact requires given artifact. This is an attempt to
diff --git a/depgenerators/osgi.prov b/depgenerators/osgi.prov
index aa16a77..5948123 100755
--- a/depgenerators/osgi.prov
+++ b/depgenerators/osgi.prov
@@ -40,6 +40,8 @@ class TagBuilder(object):
filelist = sys.stdin
paths = [x.rstrip() for x in filelist.readlines()]
for path in paths:
+ if osgi.look_for_path_in_metadata(path):
+ continue
if not os.path.islink(path):
manifest = osgi.open_manifest(path)
if not manifest:
diff --git a/depgenerators/osgi.req b/depgenerators/osgi.req
index 6f70282..e64ba1b 100755
--- a/depgenerators/osgi.req
+++ b/depgenerators/osgi.req
@@ -58,6 +58,8 @@ class TagBuilder(object):
# print requires
for path in paths:
+ if osgi.look_for_path_in_metadata(path):
+ continue
if not os.path.islink(path):
manifest = osgi.open_manifest(path)
if not manifest:
diff --git a/python/javapackages/common/osgi.py b/python/javapackages/common/osgi.py
index ebe0833..4f208d6 100644
--- a/python/javapackages/common/osgi.py
+++ b/python/javapackages/common/osgi.py
@@ -31,9 +31,12 @@
#
# Authors: Alexander Kurtakov <akurtako(a)redhat.com>
+import os
import zipfile
from zipfile import ZipFile
+from javapackages.metadata.metadata import Metadata, MetadataInvalidException
+
class OsgiProvideInfo:
def __init__(self, symbolicName=None, version=None):
@@ -134,3 +137,32 @@ def get_requires_from_manifest(manifest):
if bundle != "system.bundle":
reqs.append(bundle)
return reqs
+
+
+def look_for_path_in_metadata(path):
+ try:
+ buildroot = os.environ['RPM_BUILD_ROOT']
+ except KeyError:
+ raise Exception("RPM_BUILD_ROOT environment is not set")
+
+ for dirpath, dirnames, filenames in os.walk(buildroot):
+ for filename in filenames:
+ fpath = os.path.abspath(os.path.join(dirpath, filename))
+ # FIXME: add path to metadata directory to config file?
+ if "/maven-metadata/" in fpath:
+ try:
+ mdata = Metadata(fpath)
+ artifacts = mdata.get_provided_artifacts()
+ for a in artifacts:
+ path = os.path.abspath(path)
+ if path.startswith(buildroot):
+ path = path[len(buildroot):]
+ path = os.path.join('/', path)
+ if a.path:
+ if (os.path.abspath(a.path) == path or
+ (path.startswith(os.path.abspath(a.path)) and
+ os.path.realpath(buildroot + path))):
+ return True
+ except MetadataInvalidException:
+ pass
+ return False
diff --git a/python/javapackages/metadata/metadata.py
b/python/javapackages/metadata/metadata.py
index 40949db..cc434ac 100644
--- a/python/javapackages/metadata/metadata.py
+++ b/python/javapackages/metadata/metadata.py
@@ -145,7 +145,6 @@ class Metadata(object):
artifacts.add(artifact)
return sorted(list(artifacts))
-
def get_java_requires(self):
"""Returns JVM version required by metadata or
None"""
for metadata in self.__metadata:
@@ -165,3 +164,32 @@ class Metadata(object):
if prop.tagName == u'requiresJavaDevel':
return prop.firstChild.value
return None
+
+ def get_osgi_provides(self):
+ provs = {}
+ for metadata in self.__metadata:
+ if metadata.artifacts and metadata.artifacts.artifact:
+ for a in metadata.artifacts.artifact:
+ artifact = MetadataArtifact.from_metadata(a)
+ if artifact.properties:
+ try:
+ osgi_id = artifact.properties["osgi.id"]
+ version = artifact.properties["osgi.version"]
+ provs[osgi_id] = version
+ except KeyError:
+ pass
+ return provs
+
+ def get_osgi_requires(self):
+ reqs = set()
+ for metadata in self.__metadata:
+ if metadata.artifacts and metadata.artifacts.artifact:
+ for a in metadata.artifacts.artifact:
+ artifact = MetadataArtifact.from_metadata(a)
+ if artifact.properties:
+ try:
+ content = artifact.properties["osgi.requires"]
+ reqs |= set(content.split(','))
+ except KeyError:
+ pass
+ return reqs
Show replies by date