repo_missing: don't check arch recursively (!1820)
Remove the recursive check, as it caused an infinite loop. It took a
very long time to complete anyway, even when it worked. The reasoning
for having the recursive check in the first place was, that we would
have device packages with arch=noarch set in the APKBUILD, but which
could only be built for a certain architecture (the device
architecture). Nowadays using arch=noarch in device packages is
forbidden, and we enforce that rule [1]. So the recursive arch check
isn't necessary anymore.
[1] ac6c0a2997
This commit is contained in:
parent
80a7fe8aaf
commit
925c56febe
|
@ -25,7 +25,6 @@ Functions that work on both pmaports and (binary package) repos. See also:
|
|||
- pmb/helpers/repo.py (work on binary package repos)
|
||||
"""
|
||||
|
||||
import logging
|
||||
import copy
|
||||
|
||||
import pmb.helpers.pmaports
|
||||
|
@ -171,21 +170,3 @@ def check_arch(args, pkgname, arch, binary=True):
|
|||
else:
|
||||
arches = pmb.helpers.pmaports.get(args, pkgname)["arch"]
|
||||
return pmb.helpers.pmaports.check_arches(arches, arch)
|
||||
|
||||
|
||||
def check_arch_recurse(args, pkgname, arch):
|
||||
""" Recursively check if a package and its dependencies exist (binary repo)
|
||||
or can be built (pmaports) for a certain architecture.
|
||||
:param pkgname: name of the package
|
||||
:param arch: architecture to check against
|
||||
:returns: True when all the package's dependencies can be built or
|
||||
exist for the arch in question
|
||||
"""
|
||||
for pkgname_i in depends_recurse(args, pkgname, arch):
|
||||
if not check_arch(args, pkgname_i, arch):
|
||||
if pkgname_i != pkgname:
|
||||
logging.verbose(pkgname + ": (indirectly) depends on " +
|
||||
pkgname_i)
|
||||
logging.verbose(pkgname_i + ": can't be built for " + arch)
|
||||
return False
|
||||
return True
|
||||
|
|
|
@ -54,16 +54,14 @@ def filter_aport_packages(args, arch, pkgnames):
|
|||
|
||||
def filter_arch_packages(args, arch, pkgnames):
|
||||
""" Create a subset of pkgnames with packages removed that can not be
|
||||
built for a certain arch. The check is recursive, if one of the
|
||||
dependencies of a package can not be built for the arch in question,
|
||||
then it will not be in the final list either.
|
||||
built for a certain arch.
|
||||
|
||||
:param arch: architecture (e.g. "armhf")
|
||||
:param pkgnames: list of package names (e.g. ["hello-world", "test12"])
|
||||
:returns: subset of pkgnames (e.g. ["hello-world"]) """
|
||||
ret = []
|
||||
for pkgname in pkgnames:
|
||||
if pmb.helpers.package.check_arch_recurse(args, pkgname, arch):
|
||||
if pmb.helpers.package.check_arch(args, pkgname, arch, False):
|
||||
ret += [pkgname]
|
||||
return ret
|
||||
|
||||
|
@ -77,11 +75,8 @@ def get_relevant_packages(args, arch, pkgname=None, built=False):
|
|||
:returns: an alphabetically sorted list of pkgnames, e.g.:
|
||||
["devicepkg-dev", "hello-world", "osk-sdl"] """
|
||||
if pkgname:
|
||||
if not pmb.helpers.package.check_arch_recurse(args, pkgname, arch):
|
||||
raise RuntimeError(pkgname + " can't be built for " + arch + "."
|
||||
" Either itself or one if its dependencies is"
|
||||
" not available for that architecture. Run with"
|
||||
" -v for details.")
|
||||
if not pmb.helpers.package.check_arch(args, pkgname, arch, False):
|
||||
raise RuntimeError(pkgname + " can't be built for " + arch + ".")
|
||||
ret = pmb.helpers.package.depends_recurse(args, pkgname, arch)
|
||||
else:
|
||||
ret = pmb.helpers.pmaports.get_list(args)
|
||||
|
@ -144,8 +139,8 @@ def generate(args, arch, overview, pkgname=None, built=False):
|
|||
"""
|
||||
# Log message
|
||||
packages_str = pkgname if pkgname else "all packages"
|
||||
logging.info("Calculate packages that need to be built ({}, {}) - this may"
|
||||
" take some time".format(packages_str, arch))
|
||||
logging.info("Calculate packages that need to be built ({}, {})"
|
||||
"".format(packages_str, arch))
|
||||
|
||||
# Order relevant packages
|
||||
ret = get_relevant_packages(args, arch, pkgname, built)
|
||||
|
|
|
@ -154,32 +154,3 @@ def test_helpers_package_check_arch_pmaports(args, monkeypatch):
|
|||
|
||||
fake_pmaport["arch"] = ["all", "!armhf"]
|
||||
assert func(args, "a", "armhf", False) is False
|
||||
|
||||
|
||||
def test_helpers_package_check_arch_recurse(args, monkeypatch):
|
||||
""" Test pmb.helpers.package.check_arch_recurse() """
|
||||
# Test data
|
||||
func = pmb.helpers.package.check_arch_recurse
|
||||
depends = ["a", "b", "c"]
|
||||
arch_check_results = {}
|
||||
|
||||
def fake_depends_recurse(args, pkgname, arch):
|
||||
return depends
|
||||
monkeypatch.setattr(pmb.helpers.package, "depends_recurse",
|
||||
fake_depends_recurse)
|
||||
|
||||
def fake_check_arch(args, pkgname, arch):
|
||||
return arch_check_results[pkgname]
|
||||
monkeypatch.setattr(pmb.helpers.package, "check_arch", fake_check_arch)
|
||||
|
||||
# Result: True
|
||||
arch_check_results = {"a": True,
|
||||
"b": True,
|
||||
"c": True}
|
||||
assert func(args, "a", "armhf") is True
|
||||
|
||||
# Result: False
|
||||
arch_check_results = {"a": True,
|
||||
"b": False,
|
||||
"c": True}
|
||||
assert func(args, "a", "armhf") is False
|
||||
|
|
|
@ -79,9 +79,9 @@ def test_filter_arch_packages(args, monkeypatch):
|
|||
func = pmb.helpers.repo_missing.filter_arch_packages
|
||||
check_arch = None
|
||||
|
||||
def stub(args, arch, pmaport):
|
||||
def stub(args, arch, pmaport, binary=True):
|
||||
return check_arch
|
||||
monkeypatch.setattr(pmb.helpers.package, "check_arch_recurse", stub)
|
||||
monkeypatch.setattr(pmb.helpers.package, "check_arch", stub)
|
||||
|
||||
check_arch = False
|
||||
assert func(args, "armhf", ["hello-world"]) == []
|
||||
|
@ -94,15 +94,15 @@ def test_get_relevant_packages(args, monkeypatch):
|
|||
""" Test ...repo_missing.get_relevant_packages() """
|
||||
|
||||
# Set up fake return values
|
||||
stub_data = {"check_arch_recurse": False,
|
||||
stub_data = {"check_arch": False,
|
||||
"depends_recurse": ["a", "b", "c", "d"],
|
||||
"filter_arch_packages": ["a", "b", "c"],
|
||||
"filter_aport_packages": ["b", "a"],
|
||||
"filter_missing_packages": ["a"]}
|
||||
|
||||
def stub(args, arch, pmaport):
|
||||
return stub_data["check_arch_recurse"]
|
||||
monkeypatch.setattr(pmb.helpers.package, "check_arch_recurse", stub)
|
||||
def stub(args, arch, pmaport, binary=True):
|
||||
return stub_data["check_arch"]
|
||||
monkeypatch.setattr(pmb.helpers.package, "check_arch", stub)
|
||||
|
||||
def stub(args, arch, pmaport):
|
||||
return stub_data["depends_recurse"]
|
||||
|
@ -133,7 +133,7 @@ def test_get_relevant_packages(args, monkeypatch):
|
|||
assert "can't be built" in str(e.value)
|
||||
|
||||
# Package can be built for given arch
|
||||
stub_data["check_arch_recurse"] = True
|
||||
stub_data["check_arch"] = True
|
||||
assert func(args, "armhf", "a") == ["a"]
|
||||
assert func(args, "armhf", "a", True) == ["a", "b"]
|
||||
|
||||
|
|
Loading…
Reference in New Issue