Skip to content

Commit

Permalink
build: do auto-replacement on language packages that have been renamed
Browse files Browse the repository at this point in the history
Utilize the 'apply_package_changes' mechanism to apply algorithmic
replacement of language packages that have changed names at a major
release boundary.

Also fixed the long-standing typo: 'appy' -> 'apply'

Links: https://forum.openwrt.org/t/owut-openwrt-upgrade-tool/200035/406
Signed-off-by: Eric Fahlgren <[email protected]>
  • Loading branch information
efahl authored and aparcar committed Jan 31, 2025
1 parent b715949 commit e61fe41
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 10 deletions.
4 changes: 2 additions & 2 deletions asu/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from asu.build_request import BuildRequest
from asu.config import settings
from asu.package_changes import appy_package_changes
from asu.package_changes import apply_package_changes
from asu.util import (
add_timestamp,
check_manifest,
Expand Down Expand Up @@ -205,7 +205,7 @@ def build(build_request: BuildRequest, job=None):
.split()
)

appy_package_changes(build_request)
apply_package_changes(build_request)

build_cmd_packages = build_request.packages

Expand Down
21 changes: 20 additions & 1 deletion asu/package_changes.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,17 @@
log = logging.getLogger("rq.worker")


def appy_package_changes(build_request: BuildRequest):
# Language pack replacements are done generically on a per-version basis.
# Note that the version comparison below applies to all versions the same
# or newer, so for example "24.10" applies to snapshots, too.
language_packs = {
"24.10": {
"luci-i18n-opkg-": "luci-i18n-package-manager-",
},
}


def apply_package_changes(build_request: BuildRequest):
"""
Apply package changes to the request
Expand Down Expand Up @@ -42,3 +52,12 @@ def _add_if_missing(package):

elif build_request.profile == "buffalo_wzr-hp-g300nh-rb":
_add_if_missing("kmod-switch-rtl8366rb")

# TODO: if we ever fully implement 'packages_versions', this needs rework
for version, packages in language_packs.items():
if build_request.version >= version: # Includes snapshots
for i, package in enumerate(build_request.packages):
for old, new in packages.items():
if package.startswith(old):
lang = package.rsplit("-", 1)[1]
build_request.packages[i] = f"{new}{lang}"
47 changes: 40 additions & 7 deletions tests/test_package_changes.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from asu.build_request import BuildRequest
from asu.package_changes import appy_package_changes
from asu.package_changes import apply_package_changes


def test_apply_package_changes_adds_kmod_switch_rtl8366s():
Expand All @@ -11,7 +11,7 @@ def test_apply_package_changes_adds_kmod_switch_rtl8366s():
"packages": ["kmod-ath9k-htc"],
}
)
appy_package_changes(build_request)
apply_package_changes(build_request)

assert "kmod-switch-rtl8366s" in build_request.packages

Expand All @@ -25,7 +25,7 @@ def test_apply_package_changes_does_not_add_duplicate_packages():
"packages": ["kmod-ath9k-htc", "kmod-switch-rtl8366s"],
}
)
appy_package_changes(build_request)
apply_package_changes(build_request)

assert build_request.packages == ["kmod-ath9k-htc", "kmod-switch-rtl8366s"]

Expand All @@ -40,7 +40,7 @@ def test_apply_package_changes_does_not_modify_input_dict():
}
)
original_req = build_request.model_copy()
appy_package_changes(build_request)
apply_package_changes(build_request)

assert build_request == original_req

Expand All @@ -54,10 +54,10 @@ def test_apply_package_changes_release():
"packages": ["kmod-ath9k-htc"],
}
)
appy_package_changes(build_request)
apply_package_changes(build_request)

original_build_request = build_request.model_copy()
appy_package_changes(build_request)
apply_package_changes(build_request)

assert build_request == original_build_request

Expand All @@ -71,6 +71,39 @@ def test_apply_package_changes_mediatek():
"packages": ["ubus"],
}
)
appy_package_changes(build_request)
apply_package_changes(build_request)

assert "kmod-mt7622-firmware" in build_request.packages


def test_apply_package_changes_lang_packs():
build_request = BuildRequest(
**{
"version": "23.05.5",
"target": "mediatek/mt7622",
"profile": "foobar",
"packages": [
"luci-i18n-opkg-ko", # Should be replaced
"luci-i18n-xinetd-lt", # Should be untouched
],
}
)

assert len(build_request.packages) == 2
assert build_request.packages[0] == "luci-i18n-opkg-ko"
assert build_request.packages[1] == "luci-i18n-xinetd-lt"

apply_package_changes(build_request)

assert len(build_request.packages) == 3
assert build_request.packages[0] == "luci-i18n-opkg-ko"
assert build_request.packages[1] == "luci-i18n-xinetd-lt"
assert build_request.packages[2] == "kmod-mt7622-firmware"

build_request.version = "24.10.0-rc5"
apply_package_changes(build_request)

assert len(build_request.packages) == 3
assert build_request.packages[0] == "luci-i18n-package-manager-ko"
assert build_request.packages[1] == "luci-i18n-xinetd-lt"
assert build_request.packages[2] == "kmod-mt7622-firmware"

0 comments on commit e61fe41

Please sign in to comment.