Hi!

On Tue, Oct 15, 2024 at 06:16:58PM +0200, Daniel Gröber wrote:
> On Mon, Sep 09, 2024 at 03:44:31AM +0200, наб wrote:
> > > You need Conflicts+Replaces, not +Breaks,
> > > cf. 
> > > https://www.debian.org/doc/debian-policy/ch-relationships.html#replacing-whole-packages-forcing-their-removal
> > > 
> > > Quoting policy:
> > > > When one binary package declares a conflict with another using a
> > > > Conflicts field, dpkg will refuse to allow them to be unpacked on the
> > > > system at the same time. This is a stronger restriction than Breaks,
> > > > which prevents the broken package from being configured while the
> > > > breaking package is in the “Unpacked” state but allows both packages to
> > > > be unpacked at the same time.
> > > 
> > > Since you include an overlapping httpfs2 symlink in your package Breaks is
> > > inappropriate as even just unpacking would cause a file conflict with
> > > httpfs2.
> > > In particular, when moving files between packages,
> > > use Breaks plus Replaces, not Conflicts plus Replaces.
> > and 
> > https://www.debian.org/doc/debian-policy/ch-relationships.html#s-replaces
> > agrees on this point; I think this best describes what we're trying to
> > do here, since...
> Hmm, yeah. Now that I think about it again the httpfs2 transitional package
> would depend on libcurlfs and it having a Conflicts: httpfs2 would probably
> make httpfs2 uninstallble :)
> 
> The only nit I have is we may want to add a ~ at the end of the
> replaces+breaks constraints.
> See https://lists.debian.org/debian-devel/2024/10/msg00094.html for a
> similar discussionbut it's probably not critical in this case.
Hm. As I read it, the ~ is only really meaningful with a Debian version
(except for, like, +really versions? maybe?),
and I have "httpfs2 (<< 0.1.5)".
This indicates to me that this should be "httpfs2 (<< 1-1~)",
since this package supersedes all httpfs2es older than 1,
even if someone has a newer "real" httpfs2 installed locally.

> > > One idea I had was to just to build a httpfs2 pseudopackage that depends 
> > > on
> > > libcurlfs as part of src:libcurlfs.
> > ...so
> >   httpfs2   Arch=all transitional package Depends: libcurlfs
> >   libcurlfs Breaks+Replaces: httpfs2 (<< 0.1.5)
> > since we're moving /bin/httpfs2 &c. from httpfs2=0.1.4 to libcurlfs=0-1.
> > 
> > This also means we need to start this package at epoch 1
> > (since 0-1 < 0.1.4-1.1+b1, and we want a httpfs2 that sorts newer).
> Since you control the upstream version number I would prefer it if you
> simply bumped it to be larger than httpfs2's instead of using an epoch
> here.
Sure, I can justify this as "this is httpfs2 1, too".

> If you do want to go with the epoch per d-policy (5.6.12 `epoch`) you
> should consult d-devel before doing so. While this is a new package we are
> squatting on the httpfs2 name with the transitional package so I think it
> would still be required.
Yeah, I foolishly hoped this would be sufficiently run-of-the-mill
to not warrant this, but this is clearly not the case.

> Come to think of it: why aren't you packaging this as a native package if
> you're upstream anyway? Means you only need one git repo and only one
> branch. No need for gbp's upstream/debian branch distinction either. Just
> makes things simpler.
On principle, I never mix downstream packaging with the upstream,
and maybe I'm too gbppilled, but the standard gbp setup I find much easier.
Plus, this makes it impervious to #986320!
(if it's ruled as "don't native unless it's Debian infra";
 unlikely, given we have 822 native packages, but).

> > This configuration fresh-installs and upgrades fine for me on bookworm.
> > I've updated the gits thus.
> Looks fine to me too. Autoremove even picks up httpfs2 for removal. Neat. I
> didn't know that handles transitional packages!
>     $ apt-get autoremove
>     Reading package lists... Done
>     Building dependency tree... Done
>     Reading state information... Done
>     The following packages will be REMOVED:
>       fuse httpfs2 libfuse2
I remember reading some manual that said to format transitionals like this,
for "special handling", didn't know that was this. Cool!

Made libcurlfs 1, updated the gits to have 1-1 (and << 1-1~).
Doesn't build on CI due to the perl transition, but it works locally.

Best,
наб

Attachment: signature.asc
Description: PGP signature

Reply via email to