mirror of
https://git.yoctoproject.org/poky
synced 2026-02-12 19:53:03 +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: 07e5a6331be60d5e35d7336a6215a972ced6eb57)
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
#
|
|
# Copyright OpenEmbedded Contributors
|
|
#
|
|
# 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
|