mirror of
https://git.yoctoproject.org/poky
synced 2026-03-09 16:59:40 +01:00
cf9df9e8d89f ("ipk: Decode byte data to string in manifest handling")
did a bit of least-effort fix to a string vs byte sequence issue in the
manifest handling. The approach was chosen as it localised the fix,
rather than having to analyse further call sites.
However since then f2167ae80258 ("package_manager/ipk: do not pipe
stderr to stdout") was applied, reworking the output handling from the
subcommand. dummy_bytes() now returns a string, so stop trying to decode
it.
Fixes: f2167ae80258 ("package_manager/ipk: do not pipe stderr to stdout")
Cc: Curtis Meier <cmeier@us.ibm.com>
Cc: Pam Eggler <eggler@us.ibm.com>
(From OE-Core rev: b61739554780d70307d2b6b37d2b3b1c7df93c77)
(From OE-Core rev: 0e17a5a4f0e3301bf78f77bb5ca4aaf3e4dbc7af)
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
(cherry picked from commit 07e5a6331be60d5e35d7336a6215a972ced6eb57)
Signed-off-by: Steve Sakoman <steve@sakoman.com>
75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
#
|
|
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
|
|
from oe.manifest import Manifest
|
|
import re
|
|
|
|
class PkgManifest(Manifest):
|
|
"""
|
|
Returns a dictionary object with mip and mlp packages.
|
|
"""
|
|
def _split_multilib(self, pkg_list):
|
|
pkgs = dict()
|
|
|
|
for pkg in pkg_list.split():
|
|
pkg_type = self.PKG_TYPE_MUST_INSTALL
|
|
|
|
ml_variants = self.d.getVar('MULTILIB_VARIANTS').split()
|
|
|
|
for ml_variant in ml_variants:
|
|
if pkg.startswith(ml_variant + '-'):
|
|
pkg_type = self.PKG_TYPE_MULTILIB
|
|
|
|
if not pkg_type in pkgs:
|
|
pkgs[pkg_type] = pkg
|
|
else:
|
|
pkgs[pkg_type] += " " + pkg
|
|
|
|
return pkgs
|
|
|
|
def create_initial(self):
|
|
pkgs = dict()
|
|
|
|
with open(self.initial_manifest, "w+") as manifest:
|
|
manifest.write(self.initial_manifest_file_header)
|
|
|
|
for var in self.var_maps[self.manifest_type]:
|
|
if var in self.vars_to_split:
|
|
split_pkgs = self._split_multilib(self.d.getVar(var))
|
|
if split_pkgs is not None:
|
|
pkgs = dict(list(pkgs.items()) + list(split_pkgs.items()))
|
|
else:
|
|
pkg_list = self.d.getVar(var)
|
|
if pkg_list is not None:
|
|
pkgs[self.var_maps[self.manifest_type][var]] = self.d.getVar(var)
|
|
|
|
for pkg_type in sorted(pkgs):
|
|
for pkg in sorted(pkgs[pkg_type].split()):
|
|
manifest.write("%s,%s\n" % (pkg_type, pkg))
|
|
|
|
def create_final(self):
|
|
pass
|
|
|
|
def create_full(self, pm):
|
|
if not os.path.exists(self.initial_manifest):
|
|
self.create_initial()
|
|
|
|
initial_manifest = self.parse_initial_manifest()
|
|
pkgs_to_install = list()
|
|
for pkg_type in initial_manifest:
|
|
pkgs_to_install += initial_manifest[pkg_type]
|
|
if len(pkgs_to_install) == 0:
|
|
return
|
|
|
|
output = pm.dummy_install(pkgs_to_install)
|
|
|
|
with open(self.full_manifest, 'w+') as manifest:
|
|
pkg_re = re.compile('^Installing ([^ ]+) [^ ].*')
|
|
for line in set(output.split('\n')):
|
|
m = pkg_re.match(line)
|
|
if m:
|
|
manifest.write(m.group(1) + '\n')
|
|
|
|
return
|