From bf747ab6a5a8d8bf9384408e8ffb299f0735c554 Mon Sep 17 00:00:00 2001 From: Scott Bahling Date: Fri, 7 Feb 2020 00:24:38 +0100 Subject: Add get_package_source_version() --- obsapi/core.py | 37 ++++++++++++++++++++++++++++++++++--- obsapi/helpers.py | 7 +++++++ 2 files changed, 41 insertions(+), 3 deletions(-) (limited to 'obsapi') 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) -- cgit v1.2.3