[Rpm-maint] [PATCH 1/2] Allow adding tag RPMTAG_AUTOINSTALLED to headers of package being installed

Jeff Johnson n3npq at me.com
Thu Apr 5 20:17:28 UTC 2018



Sent from my iPad

> On Apr 4, 2018, at 9:25 AM, Aleksei Nikiforov <darktemplar at altlinux.org> wrote:
> 
> Hi
> 
> Since patch 2 is no longer needed, could you please provide a feedback about patch 1? It'd be great if this patch could be merged.
> 

I can try ...

The patch seems (from examining the patch only with limited context) to be propagating AUTOINSTALL from the old -> new header at the rpmte layer in order to ensure that the appended AUTOINSTALL tag value is persistent across package upgrades.

As before,  managing AUTOINSTALL persistence for a depsolver in rpmlib like this is rather awkward. E.g. what code should provide the add/modify/delete operations for AUTOINSTALL, particularly if/when the value is wrong?

I suspect (from memory, I've not checked) that there are some odd corner cases, particularly if/when a package is reinstalled. But perhaps dropping AUTOINSTALL is a feature, not a bug, in that case.

You likely should force a default value for AUTOINSTALL if/when the tag is not present because that is 1 fewer error returns to worry about. See how EPOCHNUM is implemented, likely as another header extension. You likely can use AUTOINSTALL as both an extension (mostly used by headerFormat) and as a tag-in-a-header (used by headerGet et al at the lower level) if you are careful.

Generally, I'd like to see RPM permit rpmlib users (like depsolvers) be able to freely append tags (arbitrary tagno, type, or reserved value) as needed without patching rpm itself.

Yes, the header unload needs to be fixed to support more than just an int8 data type for full generality.

hth

73 de Jeff
> 28.03.2018 14:58, Aleksei Nikiforov пишет:
>> Signed-off-by: Aleksei Nikiforov <darktemplar at altlinux.org>
>> ---
>>  lib/rpmte.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>> diff --git a/lib/rpmte.c b/lib/rpmte.c
>> index 40aa5e9..238c8b6 100644
>> --- a/lib/rpmte.c
>> +++ b/lib/rpmte.c
>> @@ -39,6 +39,7 @@ struct rpmte_s {
>>      char * arch;        /*!< Architecture hint. */
>>      char * os;            /*!< Operating system hint. */
>>      int isSource;        /*!< (TR_ADDED) source rpm? */
>> +    uint32_t autoinstalled;    /*! Indicates whether package was installed just as dependency satisfier or not */
>>        rpmte depends;              /*!< Package updated by this package (ERASE te) */
>>      rpmte parent;        /*!< Parent transaction element. */
>> @@ -191,6 +192,8 @@ static int addTE(rpmte p, Header h, fnpyKey key, rpmRelocation * relocs)
>>      if (p->type == TR_ADDED)
>>      p->pkgFileSize = headerGetNumber(h, RPMTAG_LONGSIGSIZE) + 96 + 256;
>>  +    p->autoinstalled = headerGetNumber(h, RPMTAG_AUTOINSTALLED);
>> +
>>      rc = 0;
>>    exit:
>> @@ -576,6 +579,11 @@ static int rpmteOpen(rpmte te, int reload_fi)
>>          rc = 1;
>>      }
>>      
>> +    if (rc)
>> +    {
>> +        rc = (headerPutUint32(h, RPMTAG_AUTOINSTALLED, &(te->autoinstalled), 1) == 1);
>> +    }
>> +
>>      rpmteSetHeader(te, h);
>>      headerFree(h);
>>      }
> 
> Best regards
> Aleksei Nikiforov


More information about the Rpm-maint mailing list