summaryrefslogtreecommitdiff
path: root/obsapi/core.py
diff options
context:
space:
mode:
authorScott Bahling <sbahling@suse.com>2020-02-07 00:24:38 +0100
committerScott Bahling <sbahling@suse.com>2020-02-07 00:24:38 +0100
commitbf747ab6a5a8d8bf9384408e8ffb299f0735c554 (patch)
tree0092c9b0dcc10e8d9f90a3f93249ff982fd292bf /obsapi/core.py
parente566c85a508562a5ebc88e13e2d5571b78eef045 (diff)
downloadobsapi-bf747ab6a5a8d8bf9384408e8ffb299f0735c554.tar.gz
obsapi-bf747ab6a5a8d8bf9384408e8ffb299f0735c554.tar.xz
obsapi-bf747ab6a5a8d8bf9384408e8ffb299f0735c554.zip
Add get_package_source_version()
Diffstat (limited to 'obsapi/core.py')
-rw-r--r--obsapi/core.py37
1 files changed, 34 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: