On Mon, Oct 24, 2005 at 03:30:42AM +0400, Alexey Tourbin wrote: > On Mon, Oct 24, 2005 at 02:50:48AM +0400, Dmitry V. Levin wrote: > > Потому что rpmEVRcmp() не коммутативно: > > > > $ rpmevrcmp 1:1.06-alt1 1.06-ipl6mdk > > -1 > > $ rpmevrcmp 1.06-ipl6mdk 1:1.06-alt1 > > -1 > > Не понял. Коммутативность(+) ::= forall(a,b) a+b = b+a > Сравнение версий и не может быть коммутативным в этом смысле. > То есть речь идёт не о свойстве aa. Ну да, я имел в виду, что оно не антисимметрично. :) > > Зато если у обоих аргументов serial определён, то rpmEVRcmp() уже > > коммутативно: > > > > $ rpmevrcmp 1:1.06-alt1 0:1.06-ipl6mdk > > 1 > > $ rpmevrcmp 0:1.06-ipl6mdk 1:1.06-alt1 > > -1 > > Как сравнивается в первом случае? Если у первого аргумента epoch не определён, а у второго определён, то меньше. Если у первого аргумента epoch определён, а у второго не определён, то зависит от версии librpm; в rpm-4_0 равно, в rpm-4_4 больше или равно в зависимости от настроек второго аргумента. :) Я могу сделать поведение утилиты rpmevrcmp более логичным, чем поведение rpmEVRcmp/rpmdsCompare. Если надо. -- ldv