Hi,

On Thu, 4 Jan 2024 21:04:57 +0100 Paul Gevers <elb...@debian.org> wrote:
> [20:21:54] <helmut> agreed, but britney2 doesn't handle :any on virtual 
> packages in any way (neither binary dep nor build dep)
> [20:22:10] <helmut> (and I'm not sure whether that's legal in any way)
> [20:23:08] <elbrus> agreed
> [20:23:28] <elbrus> which I'm fixing right now
> [20:23:39] <elbrus> apparently there's builds with :native
> [20:23:43] <elbrus> so I'll support that
> [20:24:04] <elbrus> but I wanted to know what happens with :any (and 
> virtual B-D)
> [20:25:07] <helmut> well, this is not something that existed in the 
> archive before gobject-introspection, so we're about to extend what is 
> defined
> [20:25:15] <helmut> according to smcv this is legal to dpkg and apt
> [20:25:35] <helmut> but we know that resolvers 
> (dpkg/apt/dose/britney2/...) disagree on corner cases
> [20:25:50] <helmut> and I'm guilty of having written yet another 
> resolver in dumat
> [20:26:26] <elbrus> britney2 just has to follow what dpkg and apt happen 
> to agree on
> [20:26:45] <elbrus> or maybe even, what apt says
> [20:27:01] <elbrus> if that works

back in 2015 I wrote a small tool which is able to create artificial dependency
situations involving two real packages and (optionally) a third virtual
packages to make sure that the multi-arch implementations of apt, dpkg and
dose3 agree with each other in all cases (spoiler: they do not).

    https://gitlab.mister-muffin.de/josch/deb-m-a-dep-check/

The tool is meant to make mass comparisons (it generates 8624 test cases) and
thus its interface is a bit clunky but if what you want to do is to see whether
apt, dose3 and dpkg agree on a situation where one package depends on a virtual
package with :any which is provided by a real m-a: allowed package, then you
would write this:

    ./check.sh binary pkgc amd64 amd64 no allowed depends pkgc:any

It would generate the following two stubs (shortened here for brevity):

Package: pkga
Version: 1
Architecture: amd64
Depends: pkgc:any
Multi-Arch: no

Package: pkgb
Version: 1
Architecture: amd64
Provides: pkgc
Multi-Arch: allowed

And yes, all three tools agree on this situation: it is satisfiable. If you
make pkgb m-a:no, then all tools agree that the situation is unsatisfiable.

We can do the same checks for pkga being a source package:

    ./check.sh source pkgc none amd64 none allowed depends pkgc:any

Again, all three tools agree that this situation is satisfiable.

Thanks!

cheers, josch

Attachment: signature.asc
Description: signature

Reply via email to