'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>
// 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);