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. -- ldv