pmb.chroot.apk.install_{is_necessary -> build} (MR 2185)

install_is_necessary used to do the following things:

1. Error out if there's no binary package but pmb was invoked as
   "pmbootstrap install" and build_pkgs_on_install is disabled.
2. Build the package if necessary.
3. Return if a package "needs to be installed" (Boolean or Float).

The only caller of the function is pmb.chroot.apk.install. It would not
add the package to the long "apk add" command if according to 3. it does
not need to be installed.

When I implemented this a few years ago, I probably thought it would be
useful to not unnecessarily pass packages to apk. But this actually
makes it more complicated and doesn't have a benefit, apk is perfectly
capable of recognizing which packages it had already installed.

Replace the function with a much simpler pmb.chroot.apk.install_build,
which only does 1. and 2. Change the order of the package, arch
arguments to match called functions pmb.parse.apkindex.package and
pmb.build.package.
This commit is contained in:
Oliver Smith 2022-05-28 12:44:56 +02:00
parent c898b13296
commit e91dbefd16
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
2 changed files with 55 additions and 75 deletions

View file

@ -18,15 +18,40 @@ def args(tmpdir, request):
return args
def test_install_is_necessary(args):
# osk-sdl not installed, nothing to do
ret = pmb.chroot.apk.install_is_necessary(args, False, "aarch64",
"!osk-sdl",
{"unl0kr": {"unl0kr": {}}})
assert not ret
def test_install_build(monkeypatch, args):
func = pmb.chroot.apk.install_build
ret_apkindex_package = None
# osk-sdl installed, (un)install necessary
ret = pmb.chroot.apk.install_is_necessary(args, False, "aarch64",
"!osk-sdl",
{"osk-sdl": {"osk-sdl": {}}})
assert ret
def fake_build_package(args, package, arch):
return "build-pkg"
monkeypatch.setattr(pmb.build, "package", fake_build_package)
def fake_apkindex_package(args, package, arch, must_exist):
return ret_apkindex_package
monkeypatch.setattr(pmb.parse.apkindex, "package", fake_apkindex_package)
package = "hello-world"
arch = "x86_64"
# invoked as pmb install, build_pkgs_on_install disabled
args.action = "install"
args.build_pkgs_on_install = False
with pytest.raises(RuntimeError) as e:
func(args, package, arch)
assert "no binary package found" in str(e.value)
# invoked as pmb install, build_pkgs_on_install disabled, binary exists
args.action = "install"
args.build_pkgs_on_install = False
ret_apkindex_package = {"pkgname": "hello-world"}
assert func(args, package, arch) is None
# invoked as pmb install, build_pkgs_on_install enabled
args.action = "install"
args.build_pkgs_on_install = True
assert func(args, package, arch) == "build-pkg"
# invoked as not pmb install
args.action = "chroot"
args.build_pkgs_on_install = False
assert func(args, package, arch) == "build-pkg"