Hello community,

here is the log from the commit of package openSUSE-release-tools for 
openSUSE:Factory checked in at 2017-12-08 21:48:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openSUSE-release-tools (Old)
 and      /work/SRC/openSUSE:Factory/.openSUSE-release-tools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openSUSE-release-tools"

Fri Dec  8 21:48:42 2017 rev:29 rq:555262 version:20171208.d7c5a3e

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/openSUSE-release-tools/openSUSE-release-tools.changes
    2017-12-07 13:54:27.079947177 +0100
+++ 
/work/SRC/openSUSE:Factory/.openSUSE-release-tools.new/openSUSE-release-tools.changes
       2017-12-08 21:49:01.826830477 +0100
@@ -1,0 +2,13 @@
+Fri Dec 08 14:57:15 UTC 2017 - opensuse-releaset...@opensuse.org
+
+- Update to version 20171208.d7c5a3e:
+  * compare_pkglist: do not submit package if it has removed from target
+  * pkglistgen: dump_solv function
+  * pkglistgen: add droplist generator
+  * pkglistgen: include locales and suggested
+  * biarchtool: blacklist 000release-packages
+  * biarchtool: also work for rings
+  * biarchtool: blacklist patterns that are in ring1
+  * biarchtool: fetch all packagemetas at once
+
+-------------------------------------------------------------------

Old:
----
  openSUSE-release-tools-20171205.1769209.obscpio

New:
----
  openSUSE-release-tools-20171208.d7c5a3e.obscpio

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

Other differences:
------------------
++++++ openSUSE-release-tools.spec ++++++
--- /var/tmp/diff_new_pack.LP4OnR/_old  2017-12-08 21:49:02.490801915 +0100
+++ /var/tmp/diff_new_pack.LP4OnR/_new  2017-12-08 21:49:02.494801743 +0100
@@ -20,7 +20,7 @@
 %define source_dir osc-plugin-factory
 %define announcer_filename factory-package-news
 Name:           openSUSE-release-tools
-Version:        20171205.1769209
+Version:        20171208.d7c5a3e
 Release:        0
 Summary:        Tools to aid in staging and release work for openSUSE/SUSE
 License:        GPL-2.0+ and MIT

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.LP4OnR/_old  2017-12-08 21:49:02.530800195 +0100
+++ /var/tmp/diff_new_pack.LP4OnR/_new  2017-12-08 21:49:02.530800195 +0100
@@ -1,6 +1,6 @@
 <servicedata>
   <service name="tar_scm">
     <param 
name="url">https://github.com/openSUSE/osc-plugin-factory.git</param>
-    <param 
name="changesrevision">b165e07db38620d12e4adcd078bbe00fe192d5b8</param>
+    <param 
name="changesrevision">d7c5a3e1761e2e9980c48cc7b6424e913ae6bff4</param>
   </service>
 </servicedata>

++++++ openSUSE-release-tools-20171205.1769209.obscpio -> 
openSUSE-release-tools-20171208.d7c5a3e.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171205.1769209/biarchtool.py 
new/openSUSE-release-tools-20171208.d7c5a3e/biarchtool.py
--- old/openSUSE-release-tools-20171205.1769209/biarchtool.py   2017-12-05 
13:20:49.000000000 +0100
+++ new/openSUSE-release-tools-20171208.d7c5a3e/biarchtool.py   2017-12-08 
15:46:48.000000000 +0100
@@ -44,6 +44,7 @@
         self.packages = []
         self.arch = 'i586'
         self.rdeps = None
+        self.package_metas = dict()
         self.whitelist = {
                 'i586': set([
                     'bzr',
@@ -62,6 +63,11 @@
                     'openSUSE-EULAs', # translate-toolkit
                     'skelcd-openSUSE',
                     'plasma5-workspace',
+                    'patterns-base',
+                    'patterns-fonts',
+                    'patterns-rpm-macros',
+                    'patterns-yast',
+                    '000release-packages',
                     ]),
                 }
 
@@ -76,19 +82,31 @@
         if package in self._has_baselibs:
             return self._has_baselibs[package]
 
+        is_multibuild = False
+        srcpkgname = package
+        if ':' in package:
+            is_multibuild = True
+            srcpkgname = package.split(':')[0]
+
         ret = False
-        files = self.get_filelist(self.project, package)
+        files = self.get_filelist(self.project, srcpkgname)
         if 'baselibs.conf' in files:
             logger.debug('%s has baselibs', package)
-            ret = True
+            if is_multibuild:
+                logger.warn('%s is multibuild and has baselibs. canot handle 
that!', package)
+            else:
+                ret = True
         elif '_link' in files:
-            files = self.get_filelist(self.project, package, expand = True)
+            files = self.get_filelist(self.project, srcpkgname, expand = True)
             if 'baselibs.conf' in files:
                 logger.warn('%s is linked to a baselibs package', package)
+        elif is_multibuild:
+            logger.warn('%s is multibuild', package)
         self._has_baselibs[package] = ret
         return ret
 
     def is_biarch_recursive(self, package):
+        logger.debug(package)
         if package in self.blacklist[self.arch]:
             logger.debug('%s is blacklisted', package)
             return False
@@ -110,10 +128,21 @@
 
     def _init_biarch_packages(self):
         if self.biarch_packages is None:
-            self.biarch_packages = 
set(self.meta_get_packagelist("%s:Rings:0-Bootstrap"%self.project))
-            self.biarch_packages |= 
set(self.meta_get_packagelist("%s:Rings:1-MinimalX"%self.project))
+            if ':Rings' in self.project:
+                self.biarch_packages = set()
+            else:
+                self.biarch_packages = 
set(self.meta_get_packagelist("%s:Rings:0-Bootstrap"%self.project))
+                self.biarch_packages |= 
set(self.meta_get_packagelist("%s:Rings:1-MinimalX"%self.project))
 
         self._init_rdeps()
+        self.fill_package_meta()
+
+    def fill_package_meta(self):
+        url = self.makeurl(['search', 'package'], "match=[@project='%s']" % 
self.project)
+        root = ET.fromstring(self.cached_GET(url))
+        for p in root.findall('package'):
+            name = p.attrib['name']
+            self.package_metas[name] = p
 
     def _init_rdeps(self):
         if self.rdeps is not None:
@@ -125,6 +154,9 @@
             name = pnode.get('name')
             for depnode in pnode.findall('pkgdep'):
                 depname = depnode.text
+                if depname == name:
+                    logger.warn('%s requires itself for build', name)
+                    continue
                 self.rdeps.setdefault(name, set()).add(depname)
 
     def select_packages(self, packages):
@@ -174,8 +206,10 @@
             changed = False
 
             logger.debug("processing %s", pkg)
-            pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta'])
-            pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl))
+            if not pkg in self.package_metas:
+                logger.error("%s not found", pkg)
+                continue
+            pkgmeta = self.package_metas[pkg]
 
             for build in pkgmeta.findall("./build"):
                 for n in 
build.findall("./enable[@arch='{}']".format(self.arch)):
@@ -185,6 +219,7 @@
 
             if changed:
                 try:
+                    pkgmetaurl = self.makeurl(['source', self.project, pkg, 
'_meta'])
                     self.http_PUT(pkgmetaurl, data=ET.tostring(pkgmeta))
                     if self.caching:
                         self._invalidate__cached_GET(pkgmetaurl)
@@ -203,8 +238,10 @@
             changed = False
 
             logger.debug("processing %s", pkg)
-            pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta'])
-            pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl))
+            if not pkg in self.package_metas:
+                logger.error("%s not found", pkg)
+                continue
+            pkgmeta = self.package_metas[pkg]
 
             build = pkgmeta.findall("./build")
             if not build:
@@ -217,6 +254,7 @@
 
             if changed:
                 try:
+                    pkgmetaurl = self.makeurl(['source', self.project, pkg, 
'_meta'])
                     self.http_PUT(pkgmetaurl, data=ET.tostring(pkgmeta))
                     if self.caching:
                         self._invalidate__cached_GET(pkgmetaurl)
@@ -231,16 +269,13 @@
 
     def enable_baselibs_packages(self, force=False, wipebinaries=False):
         self._init_biarch_packages()
+        todo = dict()
         for pkg in self.packages:
             logger.debug("processing %s", pkg)
-            pkgmetaurl = self.makeurl(['source', self.project, pkg, '_meta'])
-            try:
-                pkgmeta = ET.fromstring(self.cached_GET(pkgmetaurl))
-            except urllib2.HTTPError as e:
-                # catch deleted packages
-                if e.code == 404:
-                    continue
-                raise e
+            if not pkg in self.package_metas:
+                logger.error("%s not found", pkg)
+                continue
+            pkgmeta = self.package_metas[pkg]
 
             is_enabled = None
             is_disabled = None
@@ -294,17 +329,26 @@
                     logger.error('build tag not found in %s/%s!?', pkg, 
self.arch)
 
             if changed:
-                try:
-                    self.http_PUT(pkgmetaurl, data=ET.tostring(pkgmeta))
-                    if self.caching:
-                        self._invalidate__cached_GET(pkgmetaurl)
-                    if must_disable and wipebinaries:
-                        self.http_POST(self.makeurl(['build', self.project], {
-                            'cmd' : 'wipe',
-                            'arch': self.arch,
-                            'package' : pkg }))
-                except urllib2.HTTPError as e:
-                    logger.error('failed to update %s: %s', pkg, e)
+                todo[pkg] = pkgmeta
+
+        if todo:
+            logger.info("applying changes")
+        for pkg in sorted(todo.keys()):
+            pkgmeta = todo[pkg]
+            try:
+                pkgmetaurl = self.makeurl(['source', self.project, pkg, 
'_meta'])
+                self.http_PUT(pkgmetaurl, data=ET.tostring(pkgmeta))
+                if self.caching:
+                    self._invalidate__cached_GET(pkgmetaurl)
+
+                if wipebinaries and 
pkgmeta.find("./build/disable[@arch='{}']".format(self.arch)) is not None:
+                    logger.debug("wiping %s", pkg)
+                    self.http_POST(self.makeurl(['build', self.project], {
+                        'cmd' : 'wipe',
+                        'arch': self.arch,
+                        'package' : pkg }))
+            except urllib2.HTTPError as e:
+                logger.error('failed to update %s: %s', pkg, e)
 
 class CommandLineInterface(ToolBase.CommandLineInterface):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171205.1769209/compare_pkglist.py 
new/openSUSE-release-tools-20171208.d7c5a3e/compare_pkglist.py
--- old/openSUSE-release-tools-20171205.1769209/compare_pkglist.py      
2017-12-05 13:20:49.000000000 +0100
+++ new/openSUSE-release-tools-20171208.d7c5a3e/compare_pkglist.py      
2017-12-08 15:46:48.000000000 +0100
@@ -156,6 +156,11 @@
             existin_packages = self.get_source_packages(self.existin)
 
         if not self.removedonly:
+            if self.submitto:
+                dest = self.submitto
+            else:
+                dest = self.new_prj
+            removed_pkgs_in_target = self.removed_pkglist(dest)
             submit_counter = 0
             for pkg in source:
                 if pkg.startswith('000') or pkg.startswith('_'):
@@ -171,7 +176,12 @@
                         if pkg not in existin_packages:
                             continue
 
+                    if pkg in removed_pkgs_in_target:
+                        print("New package but has removed from {:<8} - 
{}".format(self.new_prj, pkg))
+                        continue
+
                     print("New package than {:<8} - {}".format(self.new_prj, 
pkg))
+
                     if self.submit:
                         if self.submit_limit and submit_counter > 
int(self.submit_limit):
                             return
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171205.1769209/pkglistgen.py 
new/openSUSE-release-tools-20171208.d7c5a3e/pkglistgen.py
--- old/openSUSE-release-tools-20171205.1769209/pkglistgen.py   2017-12-05 
13:20:49.000000000 +0100
+++ new/openSUSE-release-tools-20171208.d7c5a3e/pkglistgen.py   2017-12-08 
15:46:48.000000000 +0100
@@ -37,6 +37,13 @@
 import subprocess
 import re
 import yaml
+import requests
+import urlparse
+from StringIO import StringIO
+import gzip
+import tempfile
+import random
+import string
 
 import ToolBase
 
@@ -728,6 +735,125 @@
                 fh.close()
         return global_update
 
+    def do_create_droplist(self, subcmd, opts, *oldsolv):
+        """${cmd_name}: generate list of obsolete packages
+
+        The globally specified repositories are taken as the current
+        package set. All solv files specified on the command line
+        are old versions of those repos.
+
+        The command outputs all package names that are no longer
+        contained in or provided by the current repos.
+
+        ${cmd_usage}
+        ${cmd_option_list}
+        """
+
+        drops = dict()
+
+        for arch in self.tool.architectures:
+
+            for old in oldsolv:
+
+                logger.debug("%s: processing %s", arch, old)
+
+                pool = solv.Pool()
+                pool.setarch(arch)
+
+                for prp in self.tool.repos:
+                    project, repo = prp.split('/')
+                    fn = os.path.join(CACHEDIR, 
'repo-{}-{}-{}.solv'.format(project, repo, arch))
+                    r = pool.add_repo(prp)
+                    r.add_solv(fn)
+
+                sysrepo = 
pool.add_repo(os.path.basename(old).replace('.repo.solv', ''))
+                sysrepo.add_solv(old)
+
+                pool.createwhatprovides()
+
+                for s in sysrepo.solvables:
+                    haveit = False
+                    for s2 in pool.whatprovides(s.nameid):
+                        if s2.repo == sysrepo or s.nameid != s2.nameid:
+                            continue
+                        haveit = True
+                    if haveit:
+                        continue
+                    nevr = pool.rel2id(s.nameid, s.evrid, solv.REL_EQ)
+                    for s2 in pool.whatmatchesdep(solv.SOLVABLE_OBSOLETES, 
nevr):
+                        if s2.repo == sysrepo:
+                            continue
+                        haveit = True
+                    if haveit:
+                        continue
+                    if s.name not in drops:
+                        drops[s.name] = sysrepo.name
+
+                # mark it explicitly to avoid having 2 pools while GC is not 
run
+                del pool
+
+        for reponame in sorted(set(drops.values())):
+            print "<!-- %s -->" % reponame
+            for p in sorted(drops):
+                if drops[p] != reponame: continue
+                print "  <obsoletepackage>%s</obsoletepackage>" % p
+
+    @cmdln.option('--overwrite', action='store_true', help='overwrite if 
output file exists')
+    def do_dump_solv(self, subcmd, opts, baseurl):
+        """${cmd_name}: fetch repomd and dump solv
+
+        If an output directory is specified, a file named according
+        to the build is created there. Otherwise the solv file is
+        dumped to stdout.
+
+        ${cmd_usage}
+        ${cmd_option_list}
+        """
+
+        name = None
+        ofh = sys.stdout
+        if self.options.output_dir:
+            url = urlparse.urljoin(baseurl, 'media.1/media')
+            with requests.get(url) as media:
+                for i, line in enumerate(media.iter_lines()):
+                    if i != 1:
+                        continue
+                    name = line
+            if name is None or '-Build' not in name:
+                raise Exception('media.1/media includes no build number')
+
+            name = '{}/{}.solv'.format(self.options.output_dir, name)
+            if not opts.overwrite and os.path.exists(name):
+                logger.info("%s exists", name)
+                return
+            ofh = open(name + '.new', 'w')
+
+        pool = solv.Pool()
+        pool.setarch()
+
+        repo = pool.add_repo(''.join(random.choice(string.letters) for _ in 
range(5)))
+        f = tempfile.TemporaryFile()
+        url = urlparse.urljoin(baseurl, 'repodata/repomd.xml')
+        repomd = requests.get(url)
+        ns = { 'r': 'http://linux.duke.edu/metadata/repo' }
+        root = ET.fromstring(repomd.content)
+        location = root.find('.//r:data[@type="primary"]/r:location', 
ns).get('href')
+        f.write(repomd.content)
+        os.lseek(f.fileno(), 0, os.SEEK_SET)
+        repo.add_repomdxml(f, 0)
+        url = urlparse.urljoin(baseurl, location)
+        with requests.get(url, stream=True) as primary:
+            content = gzip.GzipFile(fileobj=StringIO(primary.content))
+            os.lseek(f.fileno(), 0, os.SEEK_SET)
+            f.write(content.read())
+            os.lseek(f.fileno(), 0, os.SEEK_SET)
+            # TODO: verify checksum
+            repo.add_rpmmd(f, None, 0)
+            repo.create_stubs()
+            repo.write(ofh)
+
+        if name is not None:
+            os.rename(name + '.new', name)
 
     @cmdln.option('--ignore-unresolvable', action='store_true', help='ignore 
unresolvable and missing packges')
     @cmdln.option('--ignore-recommended', action='store_true', help='do not 
include recommended packages automatically')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openSUSE-release-tools-20171205.1769209/script/osrt-pkglistgen-openSUSE:Leap:15.0-all
 
new/openSUSE-release-tools-20171208.d7c5a3e/script/osrt-pkglistgen-openSUSE:Leap:15.0-all
--- 
old/openSUSE-release-tools-20171205.1769209/script/osrt-pkglistgen-openSUSE:Leap:15.0-all
   2017-12-05 13:20:49.000000000 +0100
+++ 
new/openSUSE-release-tools-20171208.d7c5a3e/script/osrt-pkglistgen-openSUSE:Leap:15.0-all
   2017-12-08 15:46:48.000000000 +0100
@@ -1,4 +1,6 @@
 #!/bin/bash
+export LOCALES_FROM=openSUSE-product
+export INCLUDE_SUGGESTED=1
 osrt-pkglistgen-openSUSE:Leap:15.0
 osrt-pkglistgen-openSUSE:Leap:15.0:Rings
 osrt-pkglistgen-openSUSE:Leap:15.0:Staging

++++++ openSUSE-release-tools.obsinfo ++++++
--- /var/tmp/diff_new_pack.LP4OnR/_old  2017-12-08 21:49:03.134774214 +0100
+++ /var/tmp/diff_new_pack.LP4OnR/_new  2017-12-08 21:49:03.134774214 +0100
@@ -1,5 +1,5 @@
 name: openSUSE-release-tools
-version: 20171205.1769209
-mtime: 1512476449
-commit: 1769209240a34cf227c92baae46e2aaaccbc762f
+version: 20171208.d7c5a3e
+mtime: 1512744408
+commit: d7c5a3e1761e2e9980c48cc7b6424e913ae6bff4
 


Reply via email to