summaryrefslogtreecommitdiff
path: root/obsapi
diff options
context:
space:
mode:
Diffstat (limited to 'obsapi')
-rw-r--r--obsapi/core.py37
-rw-r--r--obsapi/helpers.py7
2 files changed, 41 insertions, 3 deletions
diff --git a/obsapi/core.py b/obsapi/core.py
index 793949e..132c06b 100644
--- a/obsapi/core.py
+++ b/obsapi/core.py
@@ -25,6 +25,7 @@ EMPTYTREE = etree.fromstring(emptyxml)
EMPTY = EMPTYTREE.xpath('.')[0]
xml2etree = helpers.xml2etree
+as_string = helpers.as_string
class ObsApi(object):
@@ -72,7 +73,7 @@ class ObsApi(object):
if xml is None:
return (Directory(None, None, None, None), [])
- d = etree.fromstring(xml)
+ d = xml2etree(xml)
directory = Directory(d.get('name'),
d.get('rev'),
d.get('vrev'),
@@ -154,6 +155,33 @@ class ObsApi(object):
return version
+ def get_package_source_version(self, prj, pkg, full=True):
+ spec_version_re = re.compile(r'Version:\s*(.+?)[\s]')
+ spec_release_re = re.compile(r'Release:\s*(.+?)[\s]')
+ spec_content = ''
+ spec_file = None
+ spec_files = self.get_spec_files(prj, pkg, filenames=True)
+ if len(list(spec_files)) == 1:
+ spec_file = spec_files.next
+ else:
+ for sf in self.get_spec_files(prj, pkg, filenames=True):
+ if sf.startswith(pkg):
+ spec_file = sf
+
+ if not spec_file:
+ return ''
+
+ spec_content = as_string(self.source.get(prj, pkg, spec_file))
+ try:
+ version = spec_version_re.search(spec_content).group(1)
+ release = spec_release_re.search(spec_content).group(1)
+ if full:
+ version = '%s-%s' % (version, release)
+ except Exception:
+ version = ''
+
+ return version
+
def get_build_config(self, prj, repo):
return self.build.get_buildconfig(prj, repo)
@@ -280,7 +308,7 @@ class ObsApi(object):
etree.SubElement(meta, 'group', groupid=groupid, role=role)
return self.put_meta(prj, pkg, etree.tostring(meta))
- def get_spec_files(self, prj, pkg=None):
+ def get_spec_files(self, prj, pkg=None, filenames=False):
if pkg is not None:
pkgs = [pkg]
else:
@@ -289,7 +317,10 @@ class ObsApi(object):
d, flist = self.ls(prj, pkg)
for srcfile in flist:
if srcfile.name.endswith('.spec'):
- yield self.source.get(prj, pkg, srcfile.name)
+ if filenames:
+ yield srcfile.name
+ else:
+ yield self.source.get(prj, pkg, srcfile.name)
def __flag_to_params(self, flag):
try:
diff --git a/obsapi/helpers.py b/obsapi/helpers.py
index 6912035..be20a31 100644
--- a/obsapi/helpers.py
+++ b/obsapi/helpers.py
@@ -21,3 +21,10 @@ def xml2etree(xml):
return etree.parse(BytesIO(xml), parser).xpath('.')[0]
except Exception as e:
raise e
+
+
+def as_string(obj):
+ if isinstance(obj, bytes):
+ return obj.decode('utf-8')
+ else:
+ return str(obj)