julien.pu...@gmail.com writes: > Oh. I think I had two problems: > (1) thinking "Replaces" meant "replaces" ; > (2) thinking d/control controlled packages.
> Let me try to see if I'm getting at something: > (*) Replaces doesn't really mean "can be used in place of" > -- that would be expressed with Breaks+Provides. > (*) Replaces shouldn't come without Breaks, but doesn't imply it > so we have to put in both (why?). Yes, this is a good question. I recently was confused about this myself despite having worked on Debian and maintained Policy and, at times, Lintian for years, which implies that we don't do a very good job of documenting the ins and outs of this. https://lists.debian.org/debian-devel/2023/06/msg00354.html is the best explanation of this that I've seen. The short summary is that the one case where Breaks is not required is if the package with Replaces also depends on a new version of the package that it is replacing. This prevents the scenario described in the footnote. The other thing that's worth noting is that sometimes you want Breaks and sometimes you want Conflicts, and both Breaks and Conflicts are useful without Replaces for other reasons, so none of them can really imply any of the others. I also saw your other bug (#1050221) about promoting that footnote to the main text. That's a partial fix, but I think we should include some portion of Helmut's explanation directly in Policy as well. (We sort of say this, but we're not nearly as explicit about it as we could be, and we don't use normative language.) > (*) In 7.6.1's example, what happens if the system has foo 1.2-2 and > the user tries to install foo-data 1.2-3? Do we end up with foo 1.2-2 > and foo-data 1.2-3 unpacked and apt/dpkg complaining it can't configure > them or does it refuse with a clear error message? It refuses to begin the operation because foo-data 1.2-3 breaks foo 1.2-2 and foo 1.2-2 is currently configured. foo 1.2-2 has to be unconfigured first before the installation of foo-data 1.2-3 can procede. (This is documented in Policy 7.3 where Breaks is discussed.) What normally happens is that users use apt rather than dpkg directly. I believe apt will force an upgrade of foo because it sees that it is broken by foo-data and will not allow installation of foo-data without either upgrading or removing foo. (dpkg does not do this because dpkg in general operates on only the packages it's told to operate on and doesn't expand the scope of one invocation to change other packages.) -- Russ Allbery (r...@debian.org) <https://www.eyrie.org/~eagle/>