bootstrap packages: pacman installed-check ignores Provides, so a provider-satisfied package is reinstalled and the transaction aborts on conflict #12181
Describe the bug
The cause is not that pacman fails to resolve provides. It resolves them fine. pacman answered the installed.insert(name, version); // "percona-server-clients"
...
let state = match installed.get(req.name.as_str()) { // "mariadb-clients" -> None
...
None => PackageState::Missing,So the request falls through to Concretely: To ReproduceOn Arch, with # mise.toml
[bootstrap.packages]
"pacman:mariadb-clients" = "latest"That command cannot succeed. Under Expected behaviorA declared package that pacman already considers satisfied — by name or by an installed
Suggested fixThe
A minimal fix keeps the existing
Two details worth keeping:
A name that resolves to a group rather than a package is not satisfiable by Scope beyond pacmanThe underlying question — does an installed provider satisfy a declared name — is not
I have only tested pacman.
|
Replies: 1 comment
|
Thanks for the detailed report. The diagnosis is correct: I opened #12183 with the fix: #12183 It keeps the batched The PR includes focused regression coverage and updated pacman documentation. One small correction to the report: current upstream pacman reads targets from stdin only when AI-assisted — Tool: Codex; model: openai/gpt-5; version: unavailable. |
Thanks for the detailed report. The diagnosis is correct:
pacman -Qresolves the provider, but mise lost that association when it keyed the result by the provider package name.I opened #12183 with the fix: #12183
It keeps the batched
pacman -Q, runspacman -Tonly for apparent misses, and queries provider-satisfied names individually to recover the installed version. It also skips provider-satisfied aliases during targeted upgrades somise bootstrap packages upgradecannot trigger the same replacement/conflict path.The PR includes focused regression coverage and updated pacman documentation.
One small correction to the report: current upstream pacman reads targets from stdin only when
-…