[devel] rpmlib comparison issue

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Ср Янв 21 18:46:11 MSK 2004


On Wed, Jan 21, 2004 at 06:41:35PM +0300, Dmitry V. Levin wrote:
> On Tue, Jan 20, 2004 at 09:45:37PM +0300, Dmitry V. Levin wrote:
> > On Tue, Jan 20, 2004 at 09:07:59PM +0300, Dmitry V. Levin wrote:
> > > On Tue, Jan 20, 2004 at 11:59:38PM +0600, Alexey Morozov wrote:
> > > > On Tue, Jan 20, 2004 at 08:44:49PM +0300, Dmitry V. Levin wrote:
> > > > > > Да, Вы правы, неэквивалентна. Значит, нужно править спеки ядреных
> > > > > > пакетов.
> > > > > Не только.  Ещё и rpmbuild надо править.
> > > > Ну, я уже говорил, что в 4.0.4-alt27, вроде, все нормально.
> > > > По крайней мере, когда rpmbuild запускается из-под xemacs :-))
> > > 
> > > Всегда жаль, когда такие приятные иллюзии рассеиваются.
> > > 
> > > Увы, фиксить надо даже не rpmbuild, а librpm.
> > 
> > С большой натяжкой это можно назвать документированным поведением:
> > 
> > rpm-4.0.4-alt28/lib/depends.c:rpmRangesOverlap
> > int rpmRangesOverlap(const char * AName, const char * AEVR, int AFlags,
> >         const char * BName, const char * BEVR, int BFlags)
> > [...]
> >     /* If either EVR is non-existent or empty, always overlap. */
> >     if (!(AEVR && *AEVR && BEVR && *BEVR)) {
> >         result = 1;
> >         goto exit;
> >     }
> > 
> > rpm-4.3-0.7/lib/rpmds.c:int rpmdsCompare(const rpmds A, const rpmds B)
> > [...]
> >     /* If either EVR is non-existent or empty, always overlap. */
> >     if (!(A->EVR[A->i] && *A->EVR[A->i] && B->EVR[B->i] && *B->EVR[B->i])) {
> >         result = 1;
> >         goto exit;
> >     }
> > 
> > Т.е. если один из сравниваемых пакетов не имеет информации о версии, то
> > сравнение версий считается успешным.
> > 
> > Поскольку у нас все реальные пакеты имеют информацию о версии, то этот
> > казус проявляется только тогда, когда хотя бы один из сравниваемых пакетов
> > является виртуальным и не имеет информации о версии.
> > 
> > Вопрос, насколько такое поведение является логичным?
> > Другими словами, насколько логично принимать допущение, что
> > (NULL > 7) == true && (NULL < 7) == true  ?
> 
> Всем спасибо за конструктивные предложения.
> 
> Я принял решение изменить алгоритм rpmRangesOverlap таким образом, чтобы
> при сравнении двух пакетов в случае, когда ровно один имеет версию, версия
> другого (не имеющего версию) пакета принималась равной -infinity.

А мы при этом не получим конфликт с upstream, последствия которого
потом придётся разгребать долго и мучительно?  Что там думают по
этому вопросу?
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20040121/72a46c9b/attachment-0001.bin>


Подробная информация о списке рассылки Devel