On Sat, Dec 20, 2008 at 12:00:53PM +0300, Alexey Tourbin wrote: > Это нужно понимать так. Версия есть строка; так что мы сравниваем > версии, имя две строки: str1 и str2. Строки разбиваются на сегменты. > Далее сравнение версий происходит по сегментам, до первого неодинакового > результата. > > версия := сегмент сегмент* > > При исчерпании сегментов сравнение происходит как в strcmp(3), > если букву считать за сегмент (то есть подстрока меньше строки). > > Сегмент может быть целочисленным или нецелочисленным. > > целочисленный_сегмент := [0-9][0-9]* (жадно) > нецелочисленный_сегемент := [^0-9][^0-9]* (жадно) > > Сравнение двух целочисленных сегментов определено естественным образом. > Сравнение целочисленного и нецелочисленного сегментов не определено (не > надо спрашивать, какая версия больше, "RC" или "33"). Сравнение двух > нецелочисленных семгенов либо определено, либо не определено. > > Сравнение двух нецелочисленных сегментов по умолчанию не определено. Здесь есть конфликт двух правил. Рассмотрим версии "1.RC" и "1.33". "1.RC" = 1 ".RC" "1.33" = 1 "." 33 Конфилкт появляется при сравнении второго сегмента. С одной стороны, подстрока меньше строки, то есть ".RC" > ".". С другой стороны, сравнение нецелочисленных сегментов по умолчанию не определено. Кажается, rpm-4.0 и rpm-4.4 по-разному сравнивают эти версии.