Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • postmarketOS/pmbootstrap
  • fossdd/pmbootstrap
  • Adrian/pmbootstrap
  • JustSoup321/pmbootstrap
  • longnoserob/pmbootstrap
  • sixthkrum/pmbootstrap
  • ollieparanoid/pmbootstrap
  • magdesign/pmbootstrap
  • anjandev/pmbootstrap
  • HenriDellal/pmbootstrap
  • Minecrell/pmbootstrap
  • chipiguay/pmbootstrap
  • ijiki16/pmbootstrap
  • whynothugo/pmbootstrap
  • amessier/pmbootstrap
  • Eisenbahnfan/pmbootstrap
  • user0-07161/pmbootstrap
  • SzczurekYT/pmbootstrap
  • neuschaefer/pmbootstrap
  • knuxify/pmbootstrap
  • Frieder.Hannenheim/pmbootstrap
21 results
Show changes
Commits on Source (8)
......@@ -28,7 +28,7 @@ def read_signature_info(tar):
:returns: (sigfilename, sigkey_path)
"""
# Get signature filename and key
prefix = "sbin/apk.static.SIGN.RSA."
prefix = "sbin/apk.static.SIGN.RSA.sha256."
sigfilename = None
for filename in tar.getnames():
if filename.startswith(prefix):
......@@ -88,7 +88,7 @@ def verify_signature(files, sigkey_path):
[
"openssl",
"dgst",
"-sha1",
"-sha256",
"-verify",
sigkey_path,
"-signature",
......
......@@ -117,6 +117,11 @@ def init(chroot: Chroot, usr_merge=UsrMerge.AUTO):
# When already initialized: just prepare the chroot
arch = chroot.arch
# We plan to ship systemd with split /usr until the /usr merge is complete
# in Alpine. Let's not drop all our code yet but just forcefully disable
# it.
usr_merge = UsrMerge.OFF
config = get_context().config
# If the channel is wrong and the user has auto_zap_misconfigured_chroots
......
......@@ -16,6 +16,7 @@ from .repo_bootstrap import RepoBootstrap
from .shutdown import Shutdown
from .test import Test
from .pkgrel_bump import PkgrelBump
from .pkgver_bump import PkgverBump
from .pull import Pull
from .kconfig_check import KConfigCheck
from .kconfig_edit import KConfigEdit
......@@ -76,6 +77,8 @@ def run_command(args: PmbArgs):
command = Test(args.action_test)
case "pkgrel_bump":
command = PkgrelBump(args.packages, args.dry, args.auto)
case "pkgver_bump":
command = PkgverBump(args.packages)
case "pull":
command = Pull()
case "kconfig":
......
# Copyright 2024 Stefan Hansson
# SPDX-License-Identifier: GPL-3.0-or-later
from pmb import commands
import pmb.helpers.pkgrel_bump
class PkgverBump(commands.Command):
def __init__(self, packages: list[str]) -> None:
self.packages = packages
def run(self) -> None:
# Each package must exist
for package in self.packages:
pmb.helpers.pmaports.find(package)
for package in self.packages:
pmb.helpers.pkgrel_bump.package(
package, bump_type=pmb.helpers.pkgrel_bump.BumpType.PKGVER
)
......@@ -238,6 +238,9 @@ apkbuild_package_attributes = {
# additional configuration options in "pmbootstrap init" that allow
# selecting alternative providers for a virtual APK package.
"_pmb_select": {"array": True},
# postmarketos-base and UI meta-packages can define the default package
# to select during "_pmb_select".
"_pmb_default": {"array": True},
}
# Variables in APKBUILD files that get parsed
......
......@@ -281,7 +281,7 @@ def ask_for_provider_select(apkbuild, providers_cfg) -> None:
providers. Updated with new providers after selection
"""
for select in apkbuild["_pmb_select"]:
providers = pmb.helpers.pmaports.find_providers(select)
providers = pmb.helpers.pmaports.find_providers(select, apkbuild["_pmb_default"])
logging.info(f"Available providers for {select} ({len(providers)}):")
has_default = False
......
# Copyright 2023 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
from enum import Enum
from pmb.core.arch import Arch
from pmb.helpers import logging
......@@ -10,27 +12,35 @@ import pmb.parse
import pmb.parse.apkindex
def package(pkgname: str, reason="", dry: bool = False) -> None:
"""Increase the pkgrel in the APKBUILD of a specific package.
class BumpType(Enum):
PKGREL = "pkgrel"
PKGVER = "pkgver"
def package(
pkgname: str, reason="", dry: bool = False, bump_type: BumpType = BumpType.PKGREL
) -> None:
"""Increase the pkgrel or pkgver in the APKBUILD of a specific package.
:param pkgname: name of the package
:param reason: string to display as reason why it was increased
:param dry: don't modify the APKBUILD, just print the message
:param bump_type: whether to bump pkgrel or pkgver
"""
# Current and new pkgrel
# Current and new pkgrel or pkgver
path = pmb.helpers.pmaports.find(pkgname) / "APKBUILD"
apkbuild = pmb.parse.apkbuild(path)
pkgrel = int(apkbuild["pkgrel"])
pkgrel_new = pkgrel + 1
version = int(apkbuild[bump_type.value])
version_new = version + 1
# Display the message, bail out in dry mode
logging.info(
"Increase '"
+ pkgname
+ "' pkgrel ("
+ str(pkgrel)
+ f"' {bump_type.value} ("
+ str(version)
+ " -> "
+ str(pkgrel_new)
+ str(version_new)
+ ")"
+ reason
)
......@@ -38,16 +48,21 @@ def package(pkgname: str, reason="", dry: bool = False) -> None:
return
# Increase
old = "\npkgrel=" + str(pkgrel) + "\n"
new = "\npkgrel=" + str(pkgrel_new) + "\n"
old = f"\n{bump_type.value}=" + str(version) + "\n"
new = f"\n{bump_type.value}=" + str(version_new) + "\n"
pmb.helpers.file.replace(path, old, new)
if bump_type == BumpType.PKGVER:
pkgrel = int(apkbuild["pkgrel"])
# Set pkgrel to 0 if we bump pkgver
pmb.helpers.file.replace(path, f"pkgrel={pkgrel}", "pkgrel=0")
# Verify
pmb.parse.apkbuild.cache_clear()
apkbuild = pmb.parse.apkbuild(path)
if int(apkbuild["pkgrel"]) != pkgrel_new:
if int(apkbuild[bump_type.value]) != version_new:
raise RuntimeError(
f"Failed to bump pkgrel for package '{pkgname}'."
f"Failed to bump {bump_type.value} for package '{pkgname}'."
" Make sure that there's a line with exactly the"
f" string '{old.strip()}' and nothing else in: {path}"
)
......
......@@ -248,12 +248,13 @@ def get(pkgname, must_exist=True, subpackages=True, skip_extra_repos=False) -> d
return get_with_path(pkgname, must_exist, subpackages, skip_extra_repos)[1]
def find_providers(provide):
def find_providers(provide: str, default: list[str]) -> list[tuple[Any, Any]]:
"""Search for providers of the specified (virtual) package in pmaports.
Note: Currently only providers from a single APKBUILD are returned.
:param provide: the (virtual) package to search providers for
:param default: the _pmb_default to look through for defaults
:returns: tuple list (pkgname, apkbuild_pkg) with providers, sorted by
provider_priority. The provider with the highest priority
(which would be selected by default) comes first.
......@@ -266,6 +267,8 @@ def find_providers(provide):
for provides in subpkg["provides"]:
# Strip provides version (=$pkgver-r$pkgrel)
if provides.split("=", 1)[0] == provide:
if subpkgname in default:
subpkg["provider_priority"] = 999999
providers[subpkgname] = subpkg
return sorted(providers.items(), reverse=True, key=lambda p: p[1].get("provider_priority", 0))
......
......@@ -1168,6 +1168,12 @@ def get_selected_providers(args: PmbArgs, packages):
if select in get_context().config.providers:
ret += [get_context().config.providers[select]]
logging.verbose(f"{package}: install selected_providers:" f" {', '.join(ret)}")
else:
for default in apkbuild["_pmb_default"]:
# default: e.g. "postmarketos-base-ui-audio-pipewire"
# select: e.g. "postmarketos-base-ui-audio"
if default.startswith(f"{select}-"):
ret += [default]
# Also iterate through dependencies to collect any providers they have
depends = apkbuild["depends"]
if depends:
......
This diff is collapsed.