1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-10-17 06:02:52 +02:00

fix broken prefer_pkgs logic

osc build -p <dir> and osc buildinfo -p <dir> is now working
again. Root cause was the switch from cpio.py and RPMQuery to
a bytes only interface
This commit is contained in:
lethliel
2019-02-20 11:14:46 +01:00
parent 7dba86ce41
commit f8c70a1525
5 changed files with 27 additions and 24 deletions

View File

@@ -441,11 +441,11 @@ def get_prefer_pkgs(dirs, wanted_arch, type, cpio):
packageQuery = packagequery.PackageQuery.query(path)
packageQueries.add(packageQuery)
prefer_pkgs = dict((name, packageQuery.path())
prefer_pkgs = dict((decode_it(name), packageQuery.path())
for name, packageQuery in packageQueries.items())
depfile = create_deps(packageQueries.values())
cpio.add('deps', '\n'.join(depfile))
cpio.add(b'deps', b'\n'.join(depfile))
return prefer_pkgs
@@ -456,22 +456,22 @@ def create_deps(pkgqs):
"""
depfile = []
for p in pkgqs:
id = '%s.%s-0/0/0: ' % (p.name(), p.arch())
depfile.append('P:%s%s' % (id, ' '.join(p.provides())))
depfile.append('R:%s%s' % (id, ' '.join(p.requires())))
id = b'%s.%s-0/0/0: ' % (p.name(), p.arch())
depfile.append(b'P:%s%s' % (id, b' '.join(p.provides())))
depfile.append(b'R:%s%s' % (id, b' '.join(p.requires())))
d = p.conflicts()
if d:
depfile.append('C:%s%s' % (id, ' '.join(d)))
depfile.append(b'C:%s%s' % (id, b' '.join(d)))
d = p.obsoletes()
if d:
depfile.append('O:%s%s' % (id, ' '.join(d)))
depfile.append(b'O:%s%s' % (id, b' '.join(d)))
d = p.recommends()
if d:
depfile.append('r:%s%s' % (id, ' '.join(d)))
depfile.append(b'r:%s%s' % (id, b' '.join(d)))
d = p.supplements()
if d:
depfile.append('s:%s%s' % (id, ' '.join(d)))
depfile.append('I:%s%s-%s 0-%s' % (id, p.name(), p.evr(), p.arch()))
depfile.append(b's:%s%s' % (id, b' '.join(d)))
depfile.append(b'I:%s%s-%s 0-%s' % (id, p.name(), p.evr().encode(), p.arch()))
return depfile

View File

@@ -5798,7 +5798,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
build_descr_data = None
if not build_descr is None:
build_descr_data = open(build_descr, 'r').read()
build_descr_data = open(build_descr, 'rb').read()
if opts.prefer_pkgs and build_descr_data is None:
raise oscerr.WrongArgs('error: a build description is needed if \'--prefer-pkgs\' is used')
elif opts.prefer_pkgs:
@@ -5809,7 +5809,7 @@ Please submit there instead, or use --nodevelproject to force direct submission.
prefer_pkgs = get_prefer_pkgs(opts.prefer_pkgs, arch,
os.path.splitext(build_descr)[1],
cpiodata)
cpiodata.add(os.path.basename(build_descr), build_descr_data)
cpiodata.add(os.path.basename(build_descr.encode()), build_descr_data)
build_descr_data = cpiodata.get()
if opts.multibuild_package:

View File

@@ -1,5 +1,6 @@
from __future__ import print_function
from osc.util.helper import decode_it
class PackageError(Exception):
"""base class for all package related errors"""
@@ -30,11 +31,11 @@ class PackageQueries(dict):
self.__setitem__(query.name(), query)
def __setitem__(self, name, query):
if name != query.name():
if decode_it(name) != decode_it(query.name()):
raise ValueError("key '%s' does not match "
"package query name '%s'" % (name, query.name()))
architecture = query.arch()
architecture = decode_it(query.arch())
if (architecture in [self.wanted_architecture, 'noarch', 'all', 'any']
or self.wanted_architecture in self.architectureMap.get(architecture,
@@ -149,10 +150,10 @@ class PackageQueryResult:
raise NotImplementedError
def evr(self):
evr = self.version()
evr = decode_it(self.version())
if self.release():
evr += "-" + self.release()
evr += "-" + decode_it(self.release())
epoch = self.epoch()
if epoch is not None and epoch != 0:

View File

@@ -177,13 +177,13 @@ class RepoDataQueryResult(osc.util.packagequery.PackageQueryResult):
return None
def vercmp(self, other):
res = osc.util.rpmquery.RpmQuery.rpmvercmp(str(self.epoch()), str(other.epoch()))
res = osc.util.rpmquery.RpmQuery.rpmvercmp(str(self.epoch()).encode(), str(other.epoch()).encode())
if res != 0:
return res
res = osc.util.rpmquery.RpmQuery.rpmvercmp(self.version(), other.version())
res = osc.util.rpmquery.RpmQuery.rpmvercmp(self.version().encode(), other.version().encode())
if res != 0:
return res
res = osc.util.rpmquery.RpmQuery.rpmvercmp(self.release(), other.release())
res = osc.util.rpmquery.RpmQuery.rpmvercmp(self.release().encode(), other.release().encode())
return res
def version(self):

View File

@@ -188,14 +188,14 @@ class RpmQuery(packagequery.PackageQuery, packagequery.PackageQueryResult):
continue
# RPMSENSE_SENSEMASK = 15 (see rpmlib.h) but ignore RPMSENSE_SERIAL (= 1 << 0) therefore use 14
if flags & 14:
name += ' '
name += b' '
if flags & self.GREATER:
name += '>'
name += b'>'
elif flags & self.LESS:
name += '<'
name += b'<'
if flags & self.EQUAL:
name += '='
name += ' %s' % ver
name += b'='
name += b' %s' % ver
res.append(name)
return res
@@ -322,6 +322,8 @@ class RpmQuery(packagequery.PackageQuery, packagequery.PackageQueryResult):
if ver1 == ver2:
return 0
res = 0
ver1 = decode_it(ver1)
ver2 = decode_it(ver2)
while res == 0:
# remove all leading non alphanumeric or tilde chars
ver1 = re.sub('^[^a-zA-Z0-9~]*', '', ver1)