[Rpm-maint] various bug fixes (patches)

Panu Matilainen pmatilai at redhat.com
Wed Nov 14 11:42:20 UTC 2007


On Tue, 13 Nov 2007, Michael Schroeder wrote:

> On Tue, Nov 13, 2007 at 02:50:36PM +0200, Panu Matilainen wrote:
>> Actually my main beef with the Suse implementation is really just a naming
>> issue about the flags:
>> +    { "hint",          RPMSENSE_MISSINGOK },
>> +    { "strong",                RPMSENSE_STRONG },
>> ...
>> +       tagflags = RPMSENSE_MISSINGOK;
>> +       if (macro && (!strcmp(macro, "recommends") || !strcmp(macro,
>> "buildrecommends")))
>> +           tagflags |= RPMSENSE_STRONG;
>>
>> "This is a strong missingok" just .. spells odd to me. I'd rather have
>> something like RPMSENSE_HINT (which is treated as "missing ok") and
>> RPMSENSE_HINT_STRONG (and "stronghint" for the spec visible part) or
>> something to that effect. Better suggestions (no pun inteded :) are most
>> welcome.
>
> You don't need the missingok flag for SUSE's weak dependencies
> at all, as they are not stored in the normal dependency tags.
>
> If you want to add weak deps you need to decide where to store them.
> There are two possibilities:
>
> 1) Jeff's way:
>
>   Put suggests into the require dependencies and enhances into
>   the provides dependencies. Use the RPMSENSE_MISSINGOK flag
>   to tell them apart from normal dependencies.
>
>   Advantage:
>     - compatible to rpm-5
>     - can do reverse lookups with '--whatprovides' and
>       'whatrequires' (this might also be a disadvantage,
>        as you currently can't exclude weak deps from
>        the searches)
>   Disadvantages:
>     - breaks with older rpm versions and installers
>     - storing enhances as provides is a bit odd
>
> 2) SUSE's way:
>
>   Put suggests and enhances in the corresponding tags (they
>   already exist in rpm-4, but where not used)
>
>   Advantage:
>     - old rpm versions and installers just ignore them
>   Disadvantage:
>     - incompatible with rpm-5
>     - there's currently no index for reverse lookups

The SUSE way is opt-in, whereas JBJ way is opt-out... in the extremely 
conservative world of RPM I think opt-in is the better way to go. We're 
incompatible with rpm5 anyway, so that aspect doesn't mean much here.

Also while storing weak requires along with regular hard requires would 
kindof make sense, mixing enhances with provides is, like you said, 
somewhat odd. Enhances are more like reverse requires, very little to do 
with provides. Better to store them separately anyway.

Everybody here seems to agree with this (so far, knock wood), a pleasant 
surprise :)

> Adding a semi-weak version (i.e. recommends/supplements) with
> RPMSENSE_STRONG is a different (and minor) issue.

Yes, and I've no problem with the semi-weak thingie (on the contrary). All 
that I object to is the symbol names used, which is indeed a minor detail 
in the big picture.

What I'd suggest is:
- take the SUSE approach and store the weak dependencies separately so
   supporting weak dependencies from depsolvers etc is entirely an opt-in
   thingy and causes no legacy incompatibilities
- ditch out the RPMSENSE_MISSINGOK symbol to signify the fact that we
   handle the issue differently (from rpm5)
- replace RPMSENSE_MISSINGOK with RPMSENSE_HINT (only really used
   internally at build-time for determining which tag the thing goes to)
- replace (compared to current SUSE patch) RPMSENSE_STRONG with
   RPMSENSE_HINT_STRONG to make it obvious what it relates to
   (only used when looking at RPMTAG_SUGGEST* RPMTAG_ENHANCE* tags
   from headers for classifying "strongness" of the weak dep)
- replace (compared to current SUSE patch) the Requires(strong) spec
   syntax variant with Requires(stronghint), again just to make it plain
   obvious what it is

Does that sound ok?

 	- Panu -





More information about the Rpm-maint mailing list