Control: severity 901827 important Control: block 913408 by 901827 Ximin Luo: > Guillem Jover: >> [..] >> >> So you could have package slab-X.Y and then depend on just that, or if >> for some reason you need to have coinstallability down to the minor >> version, then slab-X.Y.Z, in which case that package would provide >> slab-X.Y (= X.Y.Z). In addition, all of these would also provide >> slab-X (= X.Y.Z) and slab (= X.Y.Z) and probably also slab, so that >> you can represent all the range types. >> >> Cargo deps (A) dpkg deps (A-X.Y || A-X.Y.Z) >> A A >> A (>= 6) A (>= 6) >> A (>= 6.1) A (>= 6.1) >> A (>= 6.1.3) A (>= 6.1.3) >> A (>= 6, << 7) A-6 >> A (>= 6.1, << 6.2) A-6.1 >> A (= 6) A-6 >> A (= 6.1) A-6.1 >> > > Thanks for being specific here. After thinking after it for a bit, I think > this might work. The key is to only generate a single item within in the > comma-separated list of AND-clauses in the dpkg dependency, where the item > itself is a "|"-separated OR-clause. It would be pretty ugly in some > circumstances: > > Cargo deps dpkg deps > A (>= 6.1, << 9.5) ----> A-6 (>= 6.1) | A-7 | A-8 | A-9 (<< 9.5) > > but I think I have a decently-simple way of achieving this in debcargo. >
This translation scheme works for Depends and Build-Depends, however it does not work for Replaces and Breaks, please see #913408 for an example of the problem. In the abstract example above, since A-5 (= 5.1.1) replaces files from a previously-uploaded A (= 5.1.1), it must declare Replaces+Breaks: A (= 5). But in reality, there may be multiple Debian uploads of 5.1.1 including security uploads and backports. So we really need to declare: Breaks: A (>= 5.1.1~~, << 5.1.2~~) Replaces: A (>= 5.1.1~~, << 5.1.2~~) but this is not possible in Debian today. Note that this: Breaks: A (>= 5.1.1~~), A (<< 5.1.2~~) Replaces: A (>= 5.1.1~~), A (<< 5.1.2~~) won't work as it is equivalent to Breaks: A, Replaces: A which is not what we want. X -- GPG: ed25519/56034877E1F87C35 GPG: rsa4096/1318EFAC5FBBDBCE https://github.com/infinity0/pubkeys.git