[javapackages] [test] Remove maven.req cache files after each test
by Michal Srb
commit 0bd69bc64763fe1886144967a4dd70f872659b5e
Author: Michal Srb <msrb(a)redhat.com>
Date: Mon Jul 7 10:30:56 2014 +0200
[test] Remove maven.req cache files after each test
test/maven_req_test.py | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/test/maven_req_test.py b/test/maven_req_test.py
index 7174075..cbd4805 100644
--- a/test/maven_req_test.py
+++ b/test/maven_req_test.py
@@ -1,9 +1,18 @@
import unittest
+import os
from test_common import mavenreq
class TestMavenReq(unittest.TestCase):
+ def tearDown(self):
+ try:
+ os.remove(".provided_artifacts.cache")
+ os.remove(".provided_osgi.cache")
+ os.remove(".skipped_artifacts.cache")
+ except OSError:
+ pass
+
@mavenreq(["invalid.xml"])
def test_invalid(self, stdout, stderr, return_value):
self.assertNotEqual(return_value, 0)
9 years, 10 months
[javapackages] [maven.req] Initial attempt to speed maven.req generator up
by Michal Srb
commit 0d0afde9525ad3b57448d70b693689d84ab87d08
Author: Michal Srb <msrb(a)redhat.com>
Date: Mon Jul 7 10:30:49 2014 +0200
[maven.req] Initial attempt to speed maven.req generator up
depgenerators/maven.req | 54 ++++++++++++++++++++++++++++++++++++----------
1 files changed, 42 insertions(+), 12 deletions(-)
---
diff --git a/depgenerators/maven.req b/depgenerators/maven.req
index 338b6ec..642bbf0 100755
--- a/depgenerators/maven.req
+++ b/depgenerators/maven.req
@@ -39,6 +39,7 @@ import signal
import sys
import traceback
import subprocess
+import pickle
from lxml import etree
@@ -99,19 +100,39 @@ class TagBuilder(object):
self.provided_osgi = []
self.skipped_artifacts = []
if paths:
- # let's first read all metadata files for provided artifacts
self.metadata_dir = os.path.dirname(paths[0])
- metadata_paths = []
- for dirname, _, filenames in os.walk(self.metadata_dir):
- for filename in filenames:
- if filename.endswith(".pom"):
- continue
- metadata_paths.append(os.path.join(dirname, filename))
+ metadata_paths = None
+ metadata = None
- metadata = Metadata(metadata_paths)
- self.provided_artifacts.extend(metadata.get_provided_artifacts())
- self.provided_osgi.extend(metadata.get_osgi_provides())
- self.skipped_artifacts.extend(metadata.get_skipped_artifacts())
+ try:
+ cachefile = open('.provided_artifacts.cache', 'r')
+ self.provided_artifacts = pickle.load(cachefile)
+ cachefile.close()
+ except IOError:
+ metadata_paths = self.gather_metadata_files()
+ metadata = Metadata(metadata_paths)
+ self.provided_artifacts.extend(metadata.get_provided_artifacts())
+ cachefile = open('.provided_artifacts.cache', 'w')
+ pickle.dump(self.provided_artifacts, cachefile)
+ cachefile.close()
+ try:
+ cachefile = open('.provided_osgi.cache', 'r')
+ self.provided_osgi = pickle.load(cachefile)
+ cachefile.close()
+ except IOError:
+ self.provided_osgi.extend(metadata.get_osgi_provides())
+ cachefile = open('.provided_osgi.cache', 'w')
+ pickle.dump(self.provided_artifacts, cachefile)
+ cachefile.close()
+ try:
+ cachefile = open('.skipped_artifacts.cache', 'r')
+ self.skipped_artifacts = pickle.load(cachefile)
+ cachefile.close()
+ except IOError:
+ self.skipped_artifacts.extend(metadata.get_skipped_artifacts())
+ cachefile = open('.skipped_artifacts.cache', 'w')
+ pickle.dump(self.skipped_artifacts, cachefile)
+ cachefile.close()
# list of all installed POM files
# TODO: this should be probably removed
@@ -135,6 +156,15 @@ class TagBuilder(object):
continue
self.print_mvn_requires(path)
+ def gather_metadata_files(self):
+ metadata_paths = []
+ for dirname, _, filenames in os.walk(self.metadata_dir):
+ for filename in filenames:
+ if filename.endswith(".pom"):
+ continue
+ metadata_paths.append(os.path.join(dirname, filename))
+ return metadata_paths
+
# TODO: move functions like this to some POMUtils, or similar module
def __find_poms_for_metadata(self, pom_paths, metadata_path):
poms = []
9 years, 10 months
[javapackages] [maven.req] Attempt to fix rhbz#1116413
by Michal Srb
commit aa2f467f930466bf919a24d62150c1418ffdd816
Author: Michal Srb <msrb(a)redhat.com>
Date: Mon Jul 7 09:05:13 2014 +0200
[maven.req] Attempt to fix rhbz#1116413
depgenerators/maven.req | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
---
diff --git a/depgenerators/maven.req b/depgenerators/maven.req
index 5da8933..338b6ec 100755
--- a/depgenerators/maven.req
+++ b/depgenerators/maven.req
@@ -96,6 +96,7 @@ class TagBuilder(object):
paths = [line.rstrip() for line in filelist.readlines()]
self.provided_artifacts = []
+ self.provided_osgi = []
self.skipped_artifacts = []
if paths:
# let's first read all metadata files for provided artifacts
@@ -109,6 +110,7 @@ class TagBuilder(object):
metadata = Metadata(metadata_paths)
self.provided_artifacts.extend(metadata.get_provided_artifacts())
+ self.provided_osgi.extend(metadata.get_osgi_provides())
self.skipped_artifacts.extend(metadata.get_skipped_artifacts())
# list of all installed POM files
@@ -332,10 +334,10 @@ class TagBuilder(object):
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:
+ if req not in self.provided_osgi:
print("osgi({osgi_id})".format(osgi_id=req))
+ elif req not in osgi_provs:
+ print("osgi({osgi_id} = {version})".format(osgi_id=req, version=self.provided_osgi[req]))
def find_what_requires(self, artifact):
9 years, 10 months
[javapackages] [todo] We need some tests for OSGi prov/req generators
by Michal Srb
commit c90c8029d4a9f0d73692e118816f3395d91011f5
Author: Michal Srb <msrb(a)redhat.com>
Date: Fri Jul 4 14:30:31 2014 +0200
[todo] We need some tests for OSGi prov/req generators
TODO | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
---
diff --git a/TODO b/TODO
index 0b4d485..9f2cd2b 100644
--- a/TODO
+++ b/TODO
@@ -20,6 +20,8 @@
** How to set PYTHONPATH for tests correctly?
+** changes around OSGi prov/req generators need some tests
+
* BUGS
** Add testcase for pom properties with whitespace
9 years, 10 months
[javapackages] [test] OSGi tests need to have RPM_BUILD_ROOT env. variable set
by Michal Srb
commit 4350608c88c186aba45a67142faf78a6b9b6a2a0
Author: Michal Srb <msrb(a)redhat.com>
Date: Fri Jul 4 14:08:16 2014 +0200
[test] OSGi tests need to have RPM_BUILD_ROOT env. variable set
test/test_common.py | 3 +--
1 files changed, 1 insertions(+), 2 deletions(-)
---
diff --git a/test/test_common.py b/test/test_common.py
index b8d5e53..2745785 100644
--- a/test/test_common.py
+++ b/test/test_common.py
@@ -123,10 +123,9 @@ def osgiprov(filelist):
def test_decorator(fun):
def test_decorated(self):
scriptpath = path.join(DIRPATH, '..', 'depgenerators', 'osgi.prov')
- #stdin = build_depmap_paths(filelist)
stdin = "\n".join(filelist)
(stdout, stderr, return_value) = call_script(scriptpath,
- [], stdin=stdin, wrapped=True)
+ [], stdin=stdin, wrapped=True, extra_env={"RPM_BUILD_ROOT":"/dev/null"})
fun(self, stdout, stderr, return_value)
return test_decorated
return test_decorator
9 years, 10 months
[javapackages] Initial support for OSGi provides/requires in metadata
by Michal Srb
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
9 years, 10 months