luci-app-package-manager: handle versioned provides from apk query
authorMario Andrés Pérez <redacted>
Mon, 27 Apr 2026 19:32:14 +0000 (21:32 +0200)
committerPaul Donald <redacted>
Mon, 25 May 2026 08:48:47 +0000 (11:48 +0300)
'apk query --format json...' outputs the complete provides fields
including the version.
    ...
    "provides": [
      "firewall4-any",
      "uci-firewall=2025.03.17~b6e51575-r2"
    ],
    ...
Versus the previous 'apk info --full'
    ...
    Package: firewall4
    Version: 2025.03.17~b6e51575-r2
    Depends: kmod-nft-core, kmod-nft-fib, kmod-nft-nat, kmod-nft-offload, libc, nftables-json, ucode, ucode-mod-fs, ucode-mod-ubus, ucode-mod-uci
    Provides: firewall4-any, uci-firewall
    ...

Strip the '=<version>' suffix before gathering the providers chain.
This was causing some incorrent dependecy issues (ie. uci-firewall not
detected as satisfied) in the luci package-manager app.

Fixes: https://github.com/openwrt/luci/issues/8563
Fixes: https://github.com/openwrt/luci/issues/8581
Fixes: https://github.com/openwrt/openwrt/issues/23004
Fixes: https://github.com/openwrt/openwrt/issues/23136
Fixes: 1624418f64db1bef1ec8e5fafd42bec63cd0adc0 ("package-manager: migrate to apk-tools JSON API")
Signed-off-by: Mario Andrés Pérez <redacted>
applications/luci-app-package-manager/htdocs/luci-static/resources/view/package-manager.js

index e6b1a45e9a96c6fa6e4d3114cbe40db509773512..24fa7e37e22cb70986fed8ee2875640d368c5c38 100644 (file)
@@ -231,7 +231,8 @@ function parseApkQueryJson(s, dest) {
 
                // Determine all provided names (a package always provides itself)
                const provides = [name, ...(Array.isArray(pkg.provides) ? pkg.provides : [])];
-               for (const p of provides) {
+               for (let p of provides) {
+                       p = p.split('=')[0]; // Handle cases where provides are versioned
                        dest.providers[p] = dest.providers[p] || [];
                        if (!dest.providers[p].includes(pkg))
                                dest.providers[p].push(pkg);
git clone https://git.99rst.org/PROJECT