mirror of
https://git.yoctoproject.org/poky
synced 2026-01-29 21:08:42 +01:00
OpkgPM: use --add-ignore-recommends to process BAD_RECOMMENDATIONS
Currently, BAD_RECOMMENDATIONS on the opkg backed relies on editing the opkg status file (it sets BAD_RECOMMENDATIONS pkg want state to deinstalled and pinned). This is brittle, and not consistent across the different solver backends. Use new --add-ignore-recommends flag instead. (From OE-Core rev: 0d11e813ba9b4e8de9e6e5099ff85f5d914243bc) Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
df31968a4c
commit
d8e12f2bfc
@@ -1336,6 +1336,8 @@ class OpkgPM(OpkgDpkgPM):
|
||||
cmd = "%s %s" % (self.opkg_cmd, self.opkg_args)
|
||||
for exclude in (self.d.getVar("PACKAGE_EXCLUDE") or "").split():
|
||||
cmd += " --add-exclude %s" % exclude
|
||||
for bad_recommendation in (self.d.getVar("BAD_RECOMMENDATIONS") or "").split():
|
||||
cmd += " --add-ignore-recommends %s" % bad_recommendation
|
||||
cmd += " install "
|
||||
cmd += " ".join(pkgs)
|
||||
|
||||
@@ -1404,45 +1406,6 @@ class OpkgPM(OpkgDpkgPM):
|
||||
def list_installed(self):
|
||||
return OpkgPkgsList(self.d, self.target_rootfs, self.config_file).list_pkgs()
|
||||
|
||||
def handle_bad_recommendations(self):
|
||||
bad_recommendations = self.d.getVar("BAD_RECOMMENDATIONS") or ""
|
||||
if bad_recommendations.strip() == "":
|
||||
return
|
||||
|
||||
status_file = os.path.join(self.opkg_dir, "status")
|
||||
|
||||
# If status file existed, it means the bad recommendations has already
|
||||
# been handled
|
||||
if os.path.exists(status_file):
|
||||
return
|
||||
|
||||
cmd = "%s %s info " % (self.opkg_cmd, self.opkg_args)
|
||||
|
||||
with open(status_file, "w+") as status:
|
||||
for pkg in bad_recommendations.split():
|
||||
pkg_info = cmd + pkg
|
||||
|
||||
try:
|
||||
output = subprocess.check_output(pkg_info.split(), stderr=subprocess.STDOUT).strip().decode("utf-8")
|
||||
except subprocess.CalledProcessError as e:
|
||||
bb.fatal("Cannot get package info. Command '%s' "
|
||||
"returned %d:\n%s" % (pkg_info, e.returncode, e.output.decode("utf-8")))
|
||||
|
||||
if output == "":
|
||||
bb.note("Ignored bad recommendation: '%s' is "
|
||||
"not a package" % pkg)
|
||||
continue
|
||||
|
||||
for line in output.split('\n'):
|
||||
if line.startswith("Status:"):
|
||||
status.write("Status: deinstall hold not-installed\n")
|
||||
else:
|
||||
status.write(line + "\n")
|
||||
|
||||
# Append a blank line after each package entry to ensure that it
|
||||
# is separated from the following entry
|
||||
status.write("\n")
|
||||
|
||||
def dummy_install(self, pkgs):
|
||||
"""
|
||||
The following function dummy installs pkgs and returns the log of output.
|
||||
|
||||
@@ -892,8 +892,6 @@ class OpkgRootfs(DpkgOpkgRootfs):
|
||||
|
||||
self.pm.update()
|
||||
|
||||
self.pm.handle_bad_recommendations()
|
||||
|
||||
if self.progress_reporter:
|
||||
self.progress_reporter.next_stage()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user