Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2020-02-24 15:54:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Mon Feb 24 15:54:42 2020 rev:281 rq:778689 version:20200224.7a060087

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2020-02-21 16:42:46.186082410 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new.26092/openSUSE-release-tools.changes
 2020-02-24 15:57:08.688089104 +0100
@@ -1,0 +2,8 @@
+Mon Feb 24 07:50:27 UTC 2020 - [email protected]
+
+- Update to version 20200224.7a060087:
+  * Fix typos
+  * Some refactoring
+  * Add support for DoD repos to installcheck
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20200220.3b5f8650.obscpio

New:
----
  openSUSE-release-tools-20200224.7a060087.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.fCzjT2/_old  2020-02-24 15:57:10.620093100 +0100
+++ /var/tmp/diff_new_pack.fCzjT2/_new  2020-02-24 15:57:10.620093100 +0100
@@ -20,7 +20,7 @@
 %define source_dir openSUSE-release-tools
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20200220.3b5f8650
+Version:        20200224.7a060087
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0-or-later AND MIT

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.fCzjT2/_old  2020-02-24 15:57:10.652093166 +0100
+++ /var/tmp/diff_new_pack.fCzjT2/_new  2020-02-24 15:57:10.652093166 +0100
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/openSUSE-release-tools.git</param>
-    <param 
name="changesrevision">3b5f865031fbc9526d80734469d4223b1a48975a</param>
+    <param 
name="changesrevision">7a06008735f42340124b2072e53164e287330667</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20200220.3b5f8650.obscpio -> 
openSUSE-release-tools-20200224.7a060087.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20200220.3b5f8650/osclib/repochecks.py 
new/openSUSE-release-tools-20200224.7a060087/osclib/repochecks.py
--- old/openSUSE-release-tools-20200220.3b5f8650/osclib/repochecks.py   
2020-02-20 11:02:49.000000000 +0100
+++ new/openSUSE-release-tools-20200224.7a060087/osclib/repochecks.py   
2020-02-24 08:48:25.000000000 +0100
@@ -1,9 +1,13 @@
 import logging
 import os
 import re
+import requests
 import subprocess
 import tempfile
+import glob
 from fnmatch import fnmatch
+from lxml import etree as ETL
+from osc.core import http_GET
 
 import yaml
 
@@ -87,7 +91,7 @@
     line = re.sub(r'(provided by [^ ]*\-[^-]*)\-[^-]*(\.\w+)$', r'\1\2', line)
     return line
 
-def parsed_installcheck(pfile, arch, target_packages, whitelist):
+def parsed_installcheck(repos, arch, target_packages, whitelist):
     reported_problems = dict()
 
     if not len(target_packages):
@@ -100,7 +104,10 @@
             return _mapping[arch]
         return arch
 
-    p = subprocess.run(['/usr/bin/installcheck', maparch2installarch(arch), 
pfile],
+    if not isinstance(repos, list):
+        repos = [repos]
+
+    p = subprocess.run(['/usr/bin/installcheck', maparch2installarch(arch)] + 
repos,
                        stdout=subprocess.PIPE, errors='backslashreplace', 
text=True)
     if p.returncode:
         in_problem = False
@@ -162,15 +169,47 @@
 
         return parts
 
+def mirrorRepomd(cachedir, url):
+    # Use repomd.xml to get the location of primary.xml.gz
+    repoindex = 
ETL.fromstring(requests.get('{}/repodata/repomd.xml'.format(url)).content)
+    primarypath = 
repoindex.xpath("string(./repo:data[@type='primary']/repo:location/@href)",
+                                  namespaces={'repo': 
'http://linux.duke.edu/metadata/repo'})
+    if not primarypath.endswith(".xml.gz"):
+        raise Exception('unsupported primary format')
+
+    primarydest = os.path.join(cachedir, os.path.basename(primarypath))
+    if not os.path.exists(primarydest):
+        # Delete the old files first
+        for oldfile in glob.glob(glob.escape(cachedir) + "/*.xml.gz"):
+            os.unlink(oldfile)
+
+        with tempfile.NamedTemporaryFile(dir=cachedir) as primarytemp:
+            primarytemp.write(requests.get(url + '/' + primarypath).content)
+            os.link(primarytemp.name, primarydest)
+    return primarydest
 
 def mirror(apiurl, project, repository, arch):
     """Call bs_mirrorfull script to mirror packages."""
     directory = os.path.join(CACHEDIR, project, repository, arch)
-    # return directory
 
     if not os.path.exists(directory):
         os.makedirs(directory)
 
+    meta = ETL.parse(http_GET('{}/public/source/{}/_meta'.format(apiurl, 
project))).getroot()
+    repotag = 
meta.xpath("/project/repository[@name='{}']".format(repository))[0]
+    if arch not in repotag.xpath("./arch/text()"):
+        # Arch not in this project, skip mirroring
+        return directory
+
+    download = repotag.xpath("./download[@arch='{}']".format(arch))
+    if download is not None and len(download) > 0:
+        if len(download) > 1:
+            raise Exception('Multiple download urls unsupported')
+        repotype = download[0].get('repotype')
+        if repotype != 'rpmmd':
+            raise Exception('repotype {} not supported'.format(repotype))
+        return mirrorRepomd(directory, download[0].get('url'))
+
     script = os.path.join(SCRIPT_PATH, '..', 'bs_mirrorfull')
     path = '/'.join((project, repository, arch))
     logger.info('mirroring {}'.format(path))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20200220.3b5f8650/project-installcheck.py 
new/openSUSE-release-tools-20200224.7a060087/project-installcheck.py
--- old/openSUSE-release-tools-20200220.3b5f8650/project-installcheck.py        
2020-02-20 11:02:49.000000000 +0100
+++ new/openSUSE-release-tools-20200224.7a060087/project-installcheck.py        
2020-02-24 08:48:25.000000000 +0100
@@ -126,8 +126,13 @@
 
         repository_pairs = repository_path_expand(self.apiurl, project, 
repository)
         directories = []
+        primaryxmls = []
         for pair_project, pair_repository in repository_pairs:
-            directories.append(mirror(self.apiurl, pair_project, 
pair_repository, arch))
+            mirrored = mirror(self.apiurl, pair_project, pair_repository, arch)
+            if os.path.isdir(mirrored):
+                directories.append(mirrored)
+            else:
+                primaryxmls.append(mirrored)
 
         parsed = dict()
         with tempfile.TemporaryDirectory(prefix='repochecker') as dir:
@@ -148,7 +153,7 @@
                 catalog = yaml.safe_load(file)
                 target_packages = catalog.get(directories[0], [])
 
-            parsed = parsed_installcheck(pfile, arch, target_packages, [])
+            parsed = parsed_installcheck([pfile] + primaryxmls, arch, 
target_packages, [])
             for package in parsed:
                 parsed[package]['output'] = 
"\n".join(parsed[package]['output'])
 

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.fCzjT2/_old  2020-02-24 15:57:11.040093968 +0100
+++ /var/tmp/diff_new_pack.fCzjT2/_new  2020-02-24 15:57:11.040093968 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20200220.3b5f8650
-mtime: 1582192969
-commit: 3b5f865031fbc9526d80734469d4223b1a48975a
+version: 20200224.7a060087
+mtime: 1582530505
+commit: 7a06008735f42340124b2072e53164e287330667
 


Reply via email to