From 554560a75f799d3a6b6d4045c924da3f03f1f7ce Mon Sep 17 00:00:00 2001 From: Stefan Hansson <newbyte@postmarketos.org> Date: Sat, 28 Sep 2024 23:25:51 +0200 Subject: [PATCH] pmb.commands: Add pkgver_bump Similar to pkgrel but for pkgver. Useful when dealing with e.g. metapackages. --- pmb/commands/__init__.py | 3 +++ pmb/commands/pkgver_bump.py | 20 +++++++++++++++++++ pmb/helpers/pkgrel_bump.py | 39 +++++++++++++++++++++++++------------ pmb/parse/arguments.py | 11 +++++++++++ 4 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 pmb/commands/pkgver_bump.py diff --git a/pmb/commands/__init__.py b/pmb/commands/__init__.py index f6a3ba32f..25e54edd2 100644 --- a/pmb/commands/__init__.py +++ b/pmb/commands/__init__.py @@ -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": diff --git a/pmb/commands/pkgver_bump.py b/pmb/commands/pkgver_bump.py new file mode 100644 index 000000000..d67ddfba5 --- /dev/null +++ b/pmb/commands/pkgver_bump.py @@ -0,0 +1,20 @@ +# 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 + ) diff --git a/pmb/helpers/pkgrel_bump.py b/pmb/helpers/pkgrel_bump.py index 58fe74007..f7702a1d9 100644 --- a/pmb/helpers/pkgrel_bump.py +++ b/pmb/helpers/pkgrel_bump.py @@ -1,5 +1,7 @@ # 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}" ) diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py index a0d819081..f3c822b21 100644 --- a/pmb/parse/arguments.py +++ b/pmb/parse/arguments.py @@ -577,6 +577,16 @@ def arguments_pkgrel_bump(subparser): return ret +def arguments_pkgver_bump(subparser): + ret = subparser.add_parser( + "pkgver_bump", + help="increase the pkgver and reset pkgrel to 0." " useful when dealing with metapackages.", + ) + + ret.add_argument("packages", nargs="*", default=[]) + return ret + + def arguments_aportupgrade(subparser): ret = subparser.add_parser( "aportupgrade", help="check for outdated" " packages that need upgrading" @@ -958,6 +968,7 @@ def get_parser(): arguments_initfs(sub) arguments_qemu(sub) arguments_pkgrel_bump(sub) + arguments_pkgver_bump(sub) arguments_aportupgrade(sub) arguments_newapkbuild(sub) arguments_lint(sub) -- GitLab